将.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, ''));
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){}