Breeze 为什么我的约会被填错了?
我有一个带有datetime对象的实体。数据库时间为Breeze 为什么我的约会被填错了?,breeze,Breeze,我有一个带有datetime对象的实体。数据库时间为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(东部夏时制)。注意4小时的差异 根据: [T] 服务器上值的时区将转入客户端上的值(反之亦然) 听起来,Breeze将日期时间视为UTC,并将其转换为EDT。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(东部夏时制)
。注意4小时的差异
根据:
[T] 服务器上值的时区将转入客户端上的值(反之亦然)
听起来,Breeze将日期时间视为UTC,并将其转换为EDT。Breeze这样做是否基于缺少原始日期的时区信息?对于此特定实例,我不关心时区,如何从数据库中获取实际日期,而不考虑客户端/服务器时区?如果未提供,您可以替换Breeze的DataType.parseDateFromServer,以不推断任何时区信息:
breeze.DataType.parseDateFromServer = function (source) {
return new Date(Date.parse(source));
};
但是,您可能会遇到另一个问题。不同的浏览器对没有时区偏移的日期时间字符串的解释不同。。。因此,根据浏览器的不同,您可能仍然会得到奇怪的结果。如果发生这种情况,您需要向上面的代码段添加一些浏览器检测代码
编辑:也有人建议,如果您使用Moment.js,您可以执行以下操作
breeze.DataType.parseDateFromServer = function (source) {
var date = moment(source);
return date.toDate();
};
Jay,我通过覆盖breeze.DataType.parseDateFromServer实现了这一点。另外,出于某种原因,调用Date(Date.parse(source))仍在将其从UTC转换为本地。现在,我使用从字符串创建日期,并将toDate返回给breeze。这是我的代码:
breeze.DataType.parseDateFromServer=function{var date=moment(source);return date.toDate();}代码>请更正您的代码,以便我可以标记为答案。Jay,我必须添加breeze.DataType以覆盖它,否则它会给我一个错误,因为它不知道是什么数据类型。在所有示例中,我假设模块顶部有一个“var DataType=breeze.DataType;”。但是我应该说得更清楚。