为什么我的日期填充错误?

时间:2013-05-26 04:13:02

标签: breeze

我有一个带有日期时间对象的实体。数据库时间为2012-05-07 00:00:00.000,来自breeze web api调用的数据将为2012-05-07T00:00:00.000,但保存数据的属性为Sun May 06 2012 20:00:00 GMT-0400 (Eastern Daylight Time)。注意4小时的差异。

根据this

  

[T]服务器上的值的时区将被转移到客户端上的值(反之亦然)。

听起来Breeze将日期时间视为UTC并将其转换为EDT。 Breeze是否基于原始日期缺少时区信息而这样做?对于这个特定的实例,我不关心时区,如何从数据库中获取实际日期,而不管客户端/服务器时区如何?

1 个答案:

答案 0 :(得分:2)

如果未提供时区,您可以将Breeze的DataType.parseDateFromServer替换为不推断任何时区信息:

breeze.DataType.parseDateFromServer = function (source) {
     return new Date(Date.parse(source));
};

然而,您可能会遇到另一个问题。不同的浏览器解释DateTime字符串没有时区偏移不同...所以你可能仍然会得到奇怪的结果取决于浏览器。如果发生这种情况,您需要在上面的代码段中添加一些浏览器检测代码。

编辑:还有人建议,如果您使用Moment.js,您可以执行以下操作

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