带有ExtJs的asp.net MVC和WebApi应用程序中MacO上Safari的序列化日期

问题描述 投票:0回答:1

我继承了一个使用此设置来序列化日期/时间值的网络应用程序。

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)",而其他两个浏览器将日期解析为"Fri Aug 16 2019 00:00:00 GMT-0700 (Pacific Daylight Time)"。换句话说,Safari认为该日期为Zulu时区(UTC),其他浏览器则将其解释为日期)设为当地时区。

该应用程序使用ExtJs 6.6,由于此问题,由于在2019-08-16T00:00:00中将其保存在数据库中的值在2019年8月15日在Safari中呈现(在网格或日期字段中形成)。

我还创建了一个煎小提琴来重现此问题here。当您在野生动物园中运行小提琴时,“某个日期”字段将包含2019年8月15日,而在Chrome和FF中,它将包含2019年8月16日。

我知道应该在时区添加符合规范的正确值(也请参见this)。例如,此值在所有浏览器中都适用:"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中创建本地日期。

[其他想法?

谢谢

json datetime extjs safari asp.net-web-api2
1个回答
0
投票

我最终应用了此补丁:

if (Ext.browser.is.Safari) {
  Ext.data.field.Date.override({
    dateReadFormat: 'Y-m-dTH:i:s'
  });
}

ExtJs用来解析json值的方法使用此日期/时间格式,而结果日期使用本地时区。

© www.soinside.com 2019 - 2024. All rights reserved.