我正在使用JsonValueProviderFactory从我的webapi返回JSON。当我发出ajax请求时,我返回JSON,并且我一直将日期的JSON表示转换为JavaScript日期对象:ASP.NET MVC 4 WebApi JsonValueProviderFactory JSON to JavaScript日期
data.StartDateTime = new Date(data.StartDateTime);
data.StartDateTime JSON看起来像“2012-12-19T10:00:00”,它在我们对FireFox的测试中工作得非常好。当我测试对铬它处理的日期是不同的:
我测试的每个浏览器,新的日期(“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以避免这种情况。对问题有任何想法吗?
感谢您的帮助提前!