我注意到如果日期属性从服务器返回值为"2013-07-11T17:11:04.700",则breeze将值更改为Thu Jul 11 19:11:04 UTC + 0200 2013.
注意现在时间提前2个小时!
保存实体时我已经遇到过这个问题,所以我必须使用momentjs显式转换我的日期属性:
date.hours(date.hours() - moment().zone() / 60);
Run Code Online (Sandbox Code Playgroud)
但现在看来,在进行读操作时也会出现问题.
什么是确保微风不会改变我的日期属性值的最佳方法?
Jay*_*and 19
Breeze 不以任何方式操纵进出服务器的日期时间除了将UTZ时区说明符添加到从服务器返回的任何日期(还没有日期).这只是因为不同的浏览器在没有时区说明符的情况下解释日期,我们希望浏览器之间保持一致.
问题的根源可能是当您将数据与日期保存到数据库时,您使用的dateTime数据类型不包含时区偏移量.这意味着当检索数据时,您可能会"丢失"偏移并且上面提到的Breeze默认值开始.这可以通过使用具有时区偏移的数据库日期时间数据类型(SQLServer中的datetime2或datetimeoffset)来更正.
请注意,您的浏览器会根据当前时区格式化日期.
另一种方法是,如果未提供,则可以替换Breeze的DataType.parseDateFromServer以不推断任何时区信息:
breeze.DataType.parseDateFromServer = function (source) {
return new Date(Date.parse(source));
};
Run Code Online (Sandbox Code Playgroud)
但是,这可能会遇到这样的问题:不同的浏览器解释DateTime字符串时没有时区偏移不同...所以你可能仍会得到奇怪的结果,具体取决于浏览器.如果发生这种情况,您需要在上面的代码段中添加一些浏览器检测代码.
另一种方法是使用moment.js库执行以下操作.
breeze.DataType.parseDateFromServer = function (source) {
var date = moment(source);
return date.toDate();
};
Run Code Online (Sandbox Code Playgroud)
不知道这有多大帮助,但希望Breeze的行为更加清晰.
| 归档时间: |
|
| 查看次数: |
3340 次 |
| 最近记录: |