![](/img/trans.png)
[英]serializing dates correctly with javascript serializer in asp.net mvc3
[英]Serializing dates for Safari on MacOs in asp.net MVC & WebApi app with ExtJs
我繼承了一個Web應用程序應用程序,該應用程序使用此設置來序列化日期/時間值。
var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Unspecified;
該應用程序的所有用戶均位於PST時區。
Firefox和Chrome瀏覽器將“ yyyy-mm-ddThh:mi:ss”值解析為本地日期(對於瀏覽器而言為本地)。 但是,Safari將"2019-08-16T00:00:00"
(即new Date("2019-08-16T00:00:00")
"Thu Aug 15 2019 17:00:00 GMT-0700 (PDT)"
為"Thu Aug 15 2019 17:00:00 GMT-0700 (PDT)"
而其他兩個瀏覽器將日期解析為"Fri Aug 16 2019 00:00:00 GMT-0700 (Pacific Daylight Time)"
。換句話說,Safari認為該日期在祖魯時區(UTC),其他瀏覽器則將其解釋為處於當地時區。
該應用程序使用ExtJs 6.6,由於此問題,由於2019-08-16T00:00:00在Safari中以2019-08-15的形式呈現在數據庫中(在表格的網格或日期字段中),因此保存了該值。
我還創建了一個sencha小提琴來在此重現此問題。 當您在野生動物園中運行小提琴時,“某些日期”字段將包含2019年8月15日,而在Chrome和FF中,它將包含2019年8月16日。
我知道,根據規范正確的值應加時區(請參閱本一樣)。 例如,此值在所有瀏覽器中都適用: "2019-08-16T00:00:00-07:00"
。
在應用程序中使用DateTimeZoneHandling.Local可能是一個更好的選擇,但是,現在更改此值可能需要大量的測試工作。 沒有/也沒有授權支持MacOs和Safari用戶。 但是,我個人覺得這個問題很煩人,並且我想探索解決這個問題的方法。
還有哪些其他選項可解決Safari的此問題? 是否有一個腳本可以修補Safari中JavaScript日期的行為以使其與FireFox / Chrome中的行為相同? 另一個選擇是更改ExtJ中這些值的解析,但是我不知道該在哪里完成。 我可以使用new Date(year, month, day-of-month, hour, minutes, seconds)
,它也可以在Safari中創建本地日期。
還有其他想法嗎?
謝謝
我最終應用了此補丁:
if (Ext.browser.is.Safari) {
Ext.data.field.Date.override({
dateReadFormat: 'Y-m-dTH:i:s'
});
}
ExtJs用於解析json值的方法使用此日期/時間格式,而生成的日期使用本地時區。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.