如何格式化Microsoft JSON日期?

我正在使用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;
}

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


评估是没有必要的。 这将工作正常:

var date = new Date(parseInt(jsonDate.substr(6)));

substr函数取出“/ Date(”部分,parseInt函数获取整数并在最后忽略“)/”。 生成的数字被传入Date构造函数。

编辑:我故意省略基数(第二个参数parseInt); 看到我下面的评论。 另外,我完全同意Rory的评论:ISO-8601日期比这种旧格式更受欢迎 - 所以这种格式通常不应该用于新开发。 查看卓越的Json.NET库,以获得使用ISO-8601格式序列化日期的绝佳选择。

对于ISO-8601格式化的JSON日期,只需将该字符串传递给Date构造函数:

var date = new Date(jsonDate); //no ugly parsing needed; full timezone support

你可以用它从JSON获取日期:

var date = eval(jsonDate.replace(//Date((d+))//gi, "new Date($1)"));

然后,您可以使用JavaScript日期格式脚本(缩小和压缩后为1.2 KB)来按需要显示它。


对于那些使用Newtonsoft Json.NET的人 ,请阅读如何通过IE8中的Native JSON,Firefox 3.5和Json.NET来实现

此外,有关更改Json.NET编写日期格式的文档很有用: 使用Json.NET序列化日期

对于那些懒惰的人来说,这里是快速的步骤。 由于JSON有一个松散的DateTime实现,您需要使用IsoDateTimeConverter() 。 请注意,由于Json.NET 4.5默认的日期格式是ISO,所以下面的代码是不需要的。

string jsonText = JsonConvert.SerializeObject(p, new IsoDateTimeConverter());

JSON将通过

"fieldName": "2009-04-12T20:44:55"

最后,一些JavaScript将ISO日期转换为JavaScript日期:

function isoDateReviver(value) {
  if (typeof value === 'string') {
    var a = /^(d{4})-(d{2})-(d{2})T(d{2}):(d{2}):(d{2}(?:.d*)?)(?:([+-])(d{2}):(d{2}))?Z?$/.exec(value);
      if (a) {
        var utcMilliseconds = Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]);
        return new Date(utcMilliseconds);
      }
  }
  return value;
}

我是这样使用它的

$("<span />").text(isoDateReviver(item.fieldName).toLocaleString()).appendTo("#" + divName);
链接地址: http://www.djcxy.com/p/121.html

上一篇: How do I format a Microsoft JSON date?

下一篇: Serializing to JSON in jQuery