Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Breeze 为什么我的约会被填错了?_Breeze - Fatal编程技术网

Breeze 为什么我的约会被填错了?

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这样做是否基于缺少原始日期的时区信息?对于此特定实例

我有一个带有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这样做是否基于缺少原始日期的时区信息?对于此特定实例,我不关心时区,如何从数据库中获取实际日期,而不考虑客户端/服务器时区?

如果未提供,您可以替换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;”。但是我应该说得更清楚。