将 .NET DateTime 转换为 JSON

IT技术 javascript json datetime
2021-01-31 13:50:38

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

我的网络服务将 DateTime 返回给 jQuery 调用。该服务以这种格式返回数据:

/Date(1245398693390)/

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

6个回答

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

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

关于如何完全按照您的需要格式化日期,请参阅http://www.w3schools.com/jsref/jsref_obj_date.asp 上的完整Date参考

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

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]));
@Keith Substring 不进行验证,这很重要,因为即使它“始终”是那种日期格式,但现实是情况会发生变化。(例如,有人可能会意外或故意更改服务以返回 ISO8601 日期)。使用正则表达式进行解析是处理此问题的一种快速且简单(对于程序员而言)的方法。如果您稍后处理它,那也很好,但是如果这意味着您正在执行子字符串 + 验证,那么现在您将进入多行代码(希望在一个单独的函数中),这意味着更多可能出错的事情和更多的程序员时间花费(程序员比 CPU 贵)。
2021-03-12 13:50:38
我还要补充一点,在 98% 以上的情况下争论这些类型的操作的 CPU 时间是无关紧要的。如果您的规模如此之大,以至于您需要尽可能地发挥所有性能,并且您的代码已经确定使用正则表达式解析日期是最慢的操作之一 - KUDOS 和 micro - 优化掉。大多数人永远不会到达那里。一般来说,降低应用程序速度的因素是 I/O 操作(数据库调用、文件操作、远程 Web 调用等),与执行琐碎无聊的日期子字符串解析代码相比,在那里您将获得更多的收益。
2021-03-17 13:50:38
你如何解析“/Date(”并获取数字?
2021-03-29 13:50:38
这也会派上用场: var re = /-?\d+/; var m = re.exec(json_date_string); var d = new Date(parseInt(m[0]));
2021-04-03 13:50:38
或者只是 var d = new Date(1245398693390);
2021-04-09 13:50:38

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

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);
  }
}
将 double 更改为格式为 ToString("#") 的字符串。Double 可以返回小数并在某些情况下引入错误
2021-04-02 13:50:38
new Date(msg) 不接受字符串。所以不要忘记 parseInt (如本页的其他答案)。
2021-04-06 13:50:38
我在 C#.Net4.0 中使用你的代码来转换 JSON (REST) 中的 c# 日期,但它没有给我正确的 JS 日期转换。以下是 Json-Rest 正确转换返回的示例:c#date: 2009-09-12 00:00:00, equals JSdate: Date(1252684800000+0800)。您的代码给了我一个值:DATE(-28800000),这是 json 不可接受的。你的解决方案是什么?..谢谢
2021-04-10 13:50:38

使用带反向引用的 String.replace 解析日期字符串:

var milli = "/Date(1245398693390)/".replace(/\/Date\((-?\d+)\)\//, '$1');
var d = new Date(parseInt(milli));
对于这个例子,使用正则表达式是多余的。仅用于new Date(parseInt(milli.substr(6)));在字符串的数字部分开始解析。
2021-04-03 13:50:38

如果您将DateTime.Net 代码中的 a传递给 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))
eval 认为有害。
2021-04-02 13:50:38

如果您在获取时间信息时遇到问题,可以尝试以下操作:

    d.date = d.date.replace('/Date(', '');
    d.date = d.date.replace(')/', '');  
    var expDate = new Date(parseInt(d.date));
您可以跳过第二个替换语句,因为parseInt('1234abcd') returns 1234在 js 中
2021-03-15 13:50:38