可能的重复: 如何格式化JSON日期?

我的web服务返回一个DateTime到jQuery调用。该服务以以下格式返回数据:

/Date(1245398693390)/

如何将此转换为javascript友好的日期?


当前回答

如果你在获取时间信息上有困难,你可以尝试这样做:

    d.date = d.date.replace('/Date(', '');
    d.date = d.date.replace(')/', '');  
    var expDate = new Date(parseInt(d.date));

其他回答

前面的答案都表明你可以做以下事情:

var d = eval(net_datetime.slice(1, -1));

然而,这在Chrome或FF中都不起作用,因为得到的评估字面上是:

// returns the current timestamp instead of the specified epoch timestamp
var d = Date([epoch timestamp]);

正确的做法是:

var d = eval("new " + net_datetime.slice(1, -1)); // which parses to

var d = new Date([epoch timestamp]); 

我想加上我一直在用的解决方案。

如果你使用System.Web.Script.Serialization.JavaScriptSerializer(),那么返回的时间不会特定于你的时区。要解决这个问题,您还需要使用dte.getTimezoneOffset()将其返回到正确的时间。

String.prototype.toDateFromAspNet = function() {
    var dte = eval("new " + this.replace(/\//g, '') + ";");
    dte.setMinutes(dte.getMinutes() - dte.getTimezoneOffset());
    return dte;
}

现在你打电话就行了

"/Date(1245398693390)/".toDateFromAspNet();

2009年6月19日星期五00:04:53 GMT-0400(东部夏令时){}

你可以尝试第三方库,比如json.net,在项目网站上有文档。它说它需要。net 3.5。

还有一种叫做Nii。Json,我相信是从java的一个端口。我在这个博客上找到了一个链接

我用这个方法已经有一段时间了:

using System;

public static class ExtensionMethods {
  // returns the number of milliseconds since Jan 1, 1970 (useful for converting C# dates to JS dates)
  public static double UnixTicks(this DateTime dt)
  {
    DateTime d1 = new DateTime(1970, 1, 1);
    DateTime d2 = dt.ToUniversalTime();
    TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);
    return ts.TotalMilliseconds;
  }
}

假设您正在使用。net 3.5进行开发,那么它就是直接的复制/粘贴。您还可以移植它。

您可以将其封装在JSON对象中,或者简单地将其写入响应流。

在Javascript/JSON方面,你可以通过简单地将刻度传递到一个新的date对象来将其转换为日期:

jQuery.ajax({
  ...
  success: function(msg) {
    var d = new Date(msg);
  }
}

使用string解析日期字符串。替换为反向参考:

var milli = "/Date(1245398693390)/".replace(/\/Date\((-?\d+)\)\//, '$1');
var d = new Date(parseInt(milli));