[英]ASP.NET MVC 4 WebApi JsonValueProviderFactory JSON to JavaScript Date
我正在使用JsonValueProviderFactory從我的webapi返回JSON。 當我發出ajax請求時,我得到了JSON,並且我一直在將日期的JSON表示形式轉換為JavaScript Date對象:
data.StartDateTime =新日期(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以避免這種情況。 對問題有任何想法嗎?
謝謝您的幫助!
如果您繼續走這條路,您可能會發瘋……尤其是在軟件維護期間。 由於服務器和客戶端可能在不同的時區運行,因此使它們進行通信的最安全,最簡單的方法是通過UTC時間。 別擔心...瀏覽器以UTC格式接收的日期將顯示在瀏覽器本地時間。 在將日期發送到瀏覽器中的Json之前要特別注意,您不需要在UTC中進行轉換,此工作由正確的方式由所有json格式化程序自動完成。...如果(且僅當...時)DateTime TimeKind屬性設置為Utc或Local 。。。如果正確設置了此屬性(即,如果其值不是Unspecified ),則所有格式化程序在將其發送給Json之前都會以UTC格式對日期進行標准化。 因此,在您的情況下,如果在本地時間中加上日期,請確保在將所有DateTimes傳遞給Json Formatter之前,將所有DateTimes的TimeKind設置為Local。
我建議閱讀有關與TimeZone相關的問題的博客文章,以深入分析與時區有關的所有問題: Asp.net Mvc和日期和時區的噩夢
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.