Breeze不会以任何方式操纵进出服务器的日期时间,除非将 UTZ 时区说明符添加到从服务器返回但还没有的日期。这样做只是因为不同的浏览器会以不同的方式解释没有时区说明符的日期,并且我们希望浏览器之间保持一致。
您的问题的根源可能是当您将带有日期的数据保存到数据库时,您使用的 dateTime 数据类型不包含时区偏移量。这意味着当检索数据时,您可能会“丢失”偏移量,并且上面提到的 Breeze 默认值开始生效。这可以通过使用具有时区偏移量的数据库日期时间数据类型(SQLServer 中的 datetime2 或 datetimeoffset )来纠正。
请注意,您的浏览器会根据当前时区格式化日期。
另一种方法是,如果未提供任何时区信息,您可以替换 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();
};
不确定这有多大帮助,但希望 Breeze 的行为更清晰。