将.NET DateTime转换为JSON [重复]

2020/10/11 07:41 · javascript ·  · 0评论

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

我的网站服务正在将DateTime返回到jQuery调用。服务以以下格式返回数据:

/Date(1245398693390)/

如何将其转换为JavaScript友好的日期?

返回的时间是自纪元以来的毫秒数。您可以这样做:

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

有关如何精确设置日期格式的信息,请参见http://www.w3schools.com/jsref/jsref_obj_date.asp上的完整Date参考

您可以通过解析整数(如此处建议来去除非数字

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

我使用这种方法已有一段时间了:

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.replace解析日期字符串:

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

如果您将DateTime.Net代码从传递给javascript代码,则C#:

DateTime net_datetime = DateTime.Now;

javascript将其视为字符串,例如"/Date(1245398693390)/"

您可以将其转换为以下内容:

// 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起的转换需要将双精度舍入到小数点后零位

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

http://stevenlevithan.com/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的端口。我在此博客上找到了指向它的链接

前面的答案都表明您可以执行以下操作:

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(东部夏令时间){}

本文地址:http://javascript.askforanswer.com/jiang-net-datetimezhuanhuanweijson-zhongfu.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!