如何格式化Microsoft JSON日期?

霸气de小男生 提交于 2019-12-05 14:41:17

我正在使用jQuery在Ajax上进行首次尝试。 我正在将数据存储到页面上,但是为Date数据类型返回的JSON数据遇到了一些麻烦。 基本上,我得到的字符串看起来像这样:

/Date(1224043200000)/

从完全不熟悉JSON的人-如何将其格式化为短日期格式? 是否应该在jQuery代码中的某个地方处理? 我已经尝试使用$.datepicker.formatDate()尝试使用jQuery.UI.datepicker插件,但没有成功。

仅供参考:这是我结合以下答案使用的解决方案:

function getMismatch(id) {
  $.getJSON("Main.aspx?Callback=GetMismatch",
    { MismatchId: id },

    function (result) {
      $("#AuthMerchId").text(result.AuthorizationMerchantId);
      $("#SttlMerchId").text(result.SettlementMerchantId);
      $("#CreateDate").text(formatJSONDate(Date(result.AppendDts)));
      $("#ExpireDate").text(formatJSONDate(Date(result.ExpiresDts)));
      $("#LastUpdate").text(formatJSONDate(Date(result.LastUpdateDts)));
      $("#LastUpdatedBy").text(result.LastUpdateNt);
      $("#ProcessIn").text(result.ProcessIn);
    }
  );

  return false;
}

function formatJSONDate(jsonDate) {
  var newDate = dateFormat(jsonDate, "mm/dd/yyyy");
  return newDate;
}

该解决方案从回调方法中获取了我的对象,并使用日期格式库在页面上正确显示了日期。


#1楼

仅在此处添加另一种方法,如果您不十分小心(如此和其他地方所述), WCF采取的“滴答方法”就容易出现时区问题。 因此,我现在使用的是.NET和JavaScript都适当支持的ISO 8601格式,其中包括时区偏移量。 以下是详细信息:

在WCF / .NET中:

其中CreationDate是System.DateTime; ToString(“ o”)使用.NET的往返格式说明符 ,该说明符生成符合ISO 8601的日期字符串

new MyInfo {
    CreationDate = r.CreationDate.ToString("o"),
};

在JavaScript中

检索JSON之后,我就使用Date构造函数将日期固定为JavaSript Date对象,该构造函数接受ISO 8601日期字符串...

$.getJSON(
    "MyRestService.svc/myinfo",
    function (data) {
        $.each(data.myinfos, function (r) {
            this.CreatedOn = new Date(this.CreationDate);
        });
        // Now each myinfo object in the myinfos collection has a CreatedOn field that is a real JavaScript date (with timezone intact).
       alert(data.myinfos[0].CreationDate.toLocaleString());
    }
)

获得JavaScript日期后,就可以使用所有方便且可靠的Date方法,例如toDateStringtoLocaleString等。


#2楼

在页面中添加jQuery UI插件:

function DateFormate(dateConvert) {
    return $.datepicker.formatDate("dd/MM/yyyy", eval('new ' + dateConvert.slice(1, -1)));
};

#3楼

以下是解析JSON日期的非常简单的解决方案。 根据需要使用以下功能。 您只需要将获取的JSON格式Date作为参数传递给以下函数:

function JSONDate(dateStr) {
    var m, day;
    jsonDate = dateStr;
    var d = new Date(parseInt(jsonDate.substr(6)));
    m = d.getMonth() + 1;
    if (m < 10)
        m = '0' + m
    if (d.getDate() < 10)
        day = '0' + d.getDate()
    else
        day = d.getDate();
    return (m + '/' + day + '/' + d.getFullYear())
}

function JSONDateWithTime(dateStr) {
    jsonDate = dateStr;
    var d = new Date(parseInt(jsonDate.substr(6)));
    var m, day;
    m = d.getMonth() + 1;
    if (m < 10)
        m = '0' + m
    if (d.getDate() < 10)
        day = '0' + d.getDate()
    else
        day = d.getDate();
    var formattedDate = m + "/" + day + "/" + d.getFullYear();
    var hours = (d.getHours() < 10) ? "0" + d.getHours() : d.getHours();
    var minutes = (d.getMinutes() < 10) ? "0" + d.getMinutes() : d.getMinutes();
    var formattedTime = hours + ":" + minutes + ":" + d.getSeconds();
    formattedDate = formattedDate + " " + formattedTime;
    return formattedDate;
}

#4楼

var newDate = dateFormat(jsonDate, "mm/dd/yyyy"); 

有没有不使用jQuery库的另一种选择?


#5楼

我最终在Panos的正则表达式中添加了“字符”,以消除将对象写入内联脚本时Microsoft序列化程序生成的那些字符:

因此,如果您在C# 代码中有一个属性,则类似于

protected string JsonObject { get { return jsSerialiser.Serialize(_myObject); }}

在你的aspx中

<script type="text/javascript">
    var myObject = '<%= JsonObject %>';
</script>

你会得到像

var myObject = '{"StartDate":"\/Date(1255131630400)\/"}';

注意双引号。

为了使它成为eval可以正确反序列化的形式,我使用了:

myObject = myObject.replace(/"\/Date\((\d+)\)\/"/g, 'new Date($1)');

我使用原型,并使用我添加的

String.prototype.evalJSONWithDates = function() {
    var jsonWithDates = this.replace(/"\/Date\((\d+)\)\/"/g, 'new Date($1)');
    return jsonWithDates.evalJSON(true);
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!