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

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

/Date(1245398693390)/

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


当前回答

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

如果你使用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(东部夏令时){}

其他回答

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

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

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

如果你使用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(东部夏令时){}

我认为,从1970,1,1的转换需要双舍入到小数点后0位

DateTime d1 = new DateTime(1970, 1, 1);
DateTime d2 = dt.ToUniversalTime();
TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);
return Math.Round( ts.TotalMilliseconds,0);

在客户端我使用

new Date(+data.replace(/\D/g, ''));

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

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

返回的是epoch以来的毫秒数。你可以这样做:

var d = new Date();
d.setTime(1245398693390);
document.write(d);

关于如何精确地按照你想要的格式设置日期,请参阅http://www.w3schools.com/jsref/jsref_obj_date.asp上的完整日期参考

你可以通过解析整数(如这里所建议的)来剥离非数字:

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

或者应用下面的正则表达式(来自评论中的Tominator):

var jsonDate = jqueryCall();  // returns "/Date(1245398693390)/"; 
var re = /-?\d+/; 
var m = re.exec(jsonDate); 
var d = new Date(parseInt(m[0]));