我正在使用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以避免這種情況。對問題有任何想法嗎?
感謝您的幫助提前!