0

我有一个返回 JSON 字符串的 Web 服务,该字符串的属性之一是日期。在调试我看到的 Web 服务1/28/2011 6:21:02 PM时,但是在2011-01-29 02:21:02ZChrome 中的 JSON 字符串中,这被解释为Sat, 29 Jan 2011 02:21:02 GMT,在 Firefox 中它只是返回Invalid Date。我的 ajax 成功函数如下所示:

success: function(data) {
    var obj = $.parseJSON(data.d);
    var dt = new Date(obj.signupDate);
    console.log(obj.signupDate); //Firefox & Chrome: 2011-01-29 02:21:02Z
    console.log(dt); //Firefox: Invalid Date Chrome: Fri Jan 28 2011 18:21:02 GMT-0800 (Pacific Standard Time) 
    console.log(dt.toUTCString()); //Firefox: Invalid Date Chrome: 1/28/2011 6:21:02 PM 
}

所以我在浏览器和日期时间段的格式之间遇到了一些非常奇怪的不一致。

4

2 回答 2

1

JavaScript 对解析和格式化的支持Date因实现而异。

您可以参考此图表了解一些详细信息。

要解决这些不一致问题,请使用moment.js库。

在 .Net 方面,您的服务似乎正在将服务器的本地时间转换为 UTC 时间戳。如果这不是您要寻找的行为,则需要密切注意您正在使用的.Kind属性。DateTime避免Local那种,尤其是DateTime.Now你可以在这里阅读更多

于 2013-06-14T00:46:16.750 回答
0

我使用返回 long 类型的 Web 服务方法进行了测试,它运行良好。

在您的网络服务中:

private static readonly long UnixEpochTicks = (new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).Ticks;

public static long ToJsonTicks(this DateTime value)
{
    return (value.ToUniversalTime().Ticks - UnixEpochTicks) / 10000;
}

在 JavaScript 中:

var date = new Date(data.d);

快乐编码:)

于 2014-03-11T17:08:17.720 回答