我正在使用 JsonValueProviderFactory 从我的 webapi 返回 JSON。当我发出 ajax 请求时,我得到了 JSON,并且我一直在将日期的 JSON 表示形式转换为 JavaScript Date 对象:
data.StartDateTime = new Date(data.StartDateTime);
data.StartDateTime JSON 看起来像“2012-12-19T10:00:00”,它在我们针对 FireFox 的测试中运行良好。当我对 Chrome 进行测试时,它会以不同的方式处理日期:
我测试了每个浏览器: new Date("2012-12-19T10:00:00")
FF: Date {Wed Dec 19 2012 10:00:00 GMT-0700 (Mountain Standard Time)}
IE: Date {Wed Dec 19 2012 03:00:00 GMT-0700 (Mountain Standard Time)}
Chrome: Date {Wed Dec 19 2012 03:00:00 GMT-0700 (Mountain Standard Time)}
Safari: Invalid Date
因此,webkit 似乎希望包含时区。我可以计算用户时区偏移并将其附加到 JSON 日期值,这会产生:
新日期(“2012-12-19T10:00:00-07:00”)
FF: Date {Wed Dec 19 2012 10:00:00 GMT-0700 (Mountain Standard Time)}
IE: Date {Wed Dec 19 2012 10:00:00 GMT-0700 (Mountain Standard Time)}
Chrome: Date {Wed Dec 19 2012 10:00:00 GMT-0700 (Mountain Standard Time)}
Safari: Date {Wed Dec 19 2012 10:00:00 GMT-0700 (Mountain Standard Time)}
因此,根据这些发现,我似乎只需要将时区偏移量附加到 JSON 日期表示,然后就可以了。请记住,这些日期/时间不是 UTC 日期,因为它们用于安排实体业务的约会,因此如果有意义的话,日期/时间必须保持在它创建的时区中。
我编写了这个方法来获取附加到 JSON 日期值的偏移量:
_calculateTimezoneOffset: function() {
var offset = new Date().getTimezoneOffset(),
hour = parseInt(offset / 60, 10),
minutes = offset % 60,
prefix = '-';
if (offset > 0) {
prefix = '-';
} else {
prefix = '+';
hour *= -1;
}
if (hour < 10) {
hour = prefix + '0' + hour;
} else {
hour = prefix + hour;
}
if (minutes < 0) {
minutes *= -1;
}
if (minutes < 10) {
minutes = '00';
}
return hour + ':' + minutes;
}
有没有更好的方法来处理这个?在重新考虑这一切之后,我可能会开始将日期转换为 UTC 以避免这种情况。对任何一种方式的问题有什么想法吗?
提前感谢您的帮助!