停止 breeze 添加时区

Stop breeze from adding timezone

我不想 breeze 在服务器或客户端上添加时区信息。我该如何关闭它?

我在数据库中有一个 SQL DATE 字段 - 我不需要时间。在 C# 中使用 DateTime 变量时,我总是希望将它们设置为午夜。我正在按照此处所述 1 在客户端上覆盖 breeze.DataType.parseDateFromServer,但我似乎仍在服务器上进行调整。

这里的关键点是 breeze 没有跟踪时间和时区信息。问题是日期会自动使用时间组件序列化,因为在 javascript 中所有日期都有时间组件。因此,即使此信息全部设置为全零,它仍会在客户端上被解释为带有时间分量的日期。

第二个问题是几乎每个浏览器都根据浏览器自己的时区设置来格式化日期。

所以问题是服务器的时区与客户端的时区不同,或者服务器日期在没有时区信息的情况下被序列化(这将被 breeze 解释为偏移量为零的 UTC 日期. 即这不太可能与您当地的时区匹配。)这发生在 .NET 中,服务器日期声明为 DateTime 而不是 DateTime2 或 DateTimeOffset。

要解决这些问题,您需要替换 Breeze 的 DataType.parseDateFromServer,这样您就可以完全忽略传入的时区信息。

类似于:

breeze.DataType.parseDateFromServer = function (source) {
    source = stripTime(source); // you will need to write the stripTime method.
    return new Date(Date.parse(source));
};

如果你使用Moment.js,我认为你可以做到以下几点

breeze.DataType.parseDateFromServer = function (source) {
   var date = moment(source); 
   return date.toDate();   
};