Converting .NET DateTime to JSON
Possible Duplicate:
How to format a JSON date?
我的Web服务正在向jquery调用返回日期时间。服务返回以下格式的数据:
1 | /Date(1245398693390)/ |
如何将其转换为一个javascript友好的日期?
返回的是自epoch以来的毫秒数。你可以这样做:
1 2 3 | var d = new Date(); d.setTime(1245398693390); document.write(d); |
关于如何准确设置日期格式,请参阅http://www.w3schools.com/jsref/jsref_obj_date.asp上的完整
您可以通过解析整数(如这里建议的那样)来除去非数字:
1 | var date = new Date(parseInt(jsonDate.substr(6))); |
或者应用以下正则表达式(来自注释中的tominator):
1 2 3 4 | var jsonDate = jqueryCall(); // returns"/Date(1245398693390)/"; var re = /-?\d+/; var m = re.exec(jsonDate); var d = new Date(parseInt(m[0])); |
我用这种方法已经有一段时间了:
1 2 3 4 5 6 7 8 9 10 11 12 | 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方面,只需将标记传递到新的日期对象中,即可将其转换为日期:
1 2 3 4 5 6 | jQuery.ajax({ ... success: function(msg) { var d = new Date(msg); } } |
要使用string分析日期字符串,请执行以下操作:替换为backreference:
1 2 | var milli ="/Date(1245398693390)/".replace(/\/Date\((-?\d+)\)\//, '$1'); var d = new Date(parseInt(milli)); |
如果将.NET代码中的
1 | DateTime net_datetime = DateTime.Now; |
javascript将其视为字符串,如
您可以将其转换为fllowing:
1 2 | // convert the string to date correctly var d = eval(net_datetime.slice(1, -1)) |
或:
1 2 | // convert the string to date correctly var d = eval("/Date(1245398693390)/".slice(1, -1)) |
如果您在获取时间信息时遇到问题,可以尝试如下操作:
1 2 3 | d.date = d.date.replace('/Date(', ''); d.date = d.date.replace(')/', ''); var expDate = new Date(parseInt(d.date)); |
从1970,1,1的转换需要两个四舍五入到零的小数位
1 2 3 4 | 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); |
在我使用的客户端
1 | new Date(+data.replace(/\D/g, '')); |
http://stevenlevithan.com/assets/misc/date.format.js网站
1 2 3 | 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的一个端口。我在这个博客上找到了一个链接
前一个回答所有可以执行以下操作的状态:
1 | var d = eval(net_datetime.slice(1, -1)); |
然而,这在Chrome或FF中都不起作用,因为从字面上看,得到的评价是:
1 2 | // returns the current timestamp instead of the specified epoch timestamp var d = Date([epoch timestamp]); |
正确的方法是:
1 2 3 | var d = eval("new" + net_datetime.slice(1, -1)); // which parses to var d = new Date([epoch timestamp]); |
我想我应该添加我一直使用的解决方案。
如果您使用的是
1 2 3 4 5 | String.prototype.toDateFromAspNet = function() { var dte = eval("new" + this.replace(/\//g, '') +";"); dte.setMinutes(dte.getMinutes() - dte.getTimezoneOffset()); return dte; } |
现在你只要打电话
1 | "/Date(1245398693390)/".toDateFromAspNet(); |
Fri Jun 19 2009 00:04:53 GMT-0400 (Eastern Daylight Time) {}