我有一个带有日期时间对象的实体。数据库时间为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是否基于原始日期缺少时区信息而这样做?对于这个特定的实例,我不关心时区,如何从数据库中获取实际日期,而不管客户端/服务器时区如何?
答案 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();
};