将.NET DateTime转换为JSON

可能重复:
如何格式化JSONdate?

我的网站服务正在返回一个date时间到一个jQuery调用。 该服务以这种格式返回数据:

/Date(1245398693390)/ 

我怎样才能把它转换成JavaScript友好的date?

返回的是从时代开始的毫秒数。 你可以这样做:

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

关于如何根据需要精确设置date的格式,请参阅http://www.w3schools.com/jsref/jsref_obj_date.asp上的完整;Date参考

您可以通过parsing整数来去除非数字( 如下所示 ):

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

或者应用以下正则expression式(来自Tominator的评论):

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

我一直在使用这个方法:

 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对象中,或者将其写入响应stream。

在Javascript / JSON方面,通过简单地将滴答传入一个新的Date对象,将其转换为date:

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

使用带反向引用的String.replaceparsingdatestring:

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

如果您将.Net代码中的DateTime传递给JavaScript代码,则C#:

 DateTime net_datetime = DateTime.Now; 

javascript将其视为string,如"/Date(1245398693390)/"

你可以将其转换为fllowing:

 // convert the string to date correctly var d = eval(net_datetime.slice(1, -1)) 

要么:

 // convert the string to date correctly var d = eval("/Date(1245398693390)/".slice(1, -1)) 

如果您无法获取时间信息,可以尝试如下所示:

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

从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, '')); 

assets/misc/date.format.js

 var date = eval(data.Data.Entity.Slrq.replace(/\/Date\((\d )\)\//gi, "new Date($1)")); alert(date.format("yyyy-MM-dd HH:mm:ss")); alert(dateFormat(date, "yyyy-MM-dd HH:mm:ss")); 

你可以尝试像json.net这样的第三方库有项目网站上的文档。 它确实要求.net 3.5。

否则还有一个叫Nii.json,我相信是从Java端口。 我在这个博客上find了一个链接

以前的答案都说明你可以做到以下几点:

 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]); 

以为我会加我的解决scheme,我一直在使用。

如果您使用的是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(); 

Fri Jun 19 2009 00:04:53 GMT-0400(Eastern Daylight Time){}