关于asp.net Web api:使用时间本地化转换从Web Api到Breeze的DateTime

DateTime from WebApi to Breeze is transformed with the Time Localization

我有一个表单,可以在其中设置实体的开始日期和结束日期。

在Web Api端,将日期保存到数据库之前,我将开始日期设置为2013-09-25 00:00:00.000,将结束日期设置为2013-09-26 23:59:59.000

1
2
3
var vote = (VotingSet)Entity;
vote.Start = new DateTime(vote.Start.Year, vote.Start.Month, vote.Start.Day, 0, 0, 0, 0);
vote.End = new DateTime(vote.End.Year, vote.End.Month, vote.End.Day, 23, 59, 58);

这是从发送到其余服务的JSON发出的,如下所示:

  • 开始:"2013-09-25T00:00:00.000Z"
  • 结束:"2013-09-26T00:00:00.000Z"

保存后,在javascript客户端中,该实体将使用新密钥和服务器提供的属性进行更新。

可观察的日期对象将具有以下值

  • 开始时间:2013年9月25日星期三03:00:00 GMT 0300(格林尼治标准时间夏令时间)
  • 结束:2013年9月27日星期五格林尼治标准时间0300(格林尼治标准时间夏令时间)

这就是我从服务器

返回的内容

  • 开始:"2013-09-25T00:00:00.000"
  • 结束:"2013-09-26T23:59:58.000"

如何确保未修改对象中的小时数?

编辑:

关于javascript中的日期时间,这里有一个很好的解释。

最后,我用这个片段来解决我的问题:
breeze.DataType.parseDateFromServer =函数(源){
var date = moment(source);
返回date.toDate();
};
它覆盖了微风自己的函数,并为datetime添加了时间偏移。


Breeze不会以任何方式操纵往返于服务器的日期时间,除了将UTZ时区说明符添加到从服务器返回的尚无日期的任何日期之外。这样做是因为不同的浏览器在没有时区说明符的情况下对日期的解释不同,并且我们希望浏览器之间具有一致性。

在此处发布的答案中对此进行了更详细的讨论。


您正在传递ISO8601格式的时间戳,这很好。当您在末尾传递Z时,表示时间戳表示UTC。当您将它们加载到JavaScript中时,它将考虑到这一点。

如果您正在寻找有用的响应,则仍然需要显示更多代码。您目前在.NET中描述的内容与您提供的时间戳不太吻合。而且似乎大多数问题与JavaScript有关,而您尚未显示任何代码,因此我只能猜测您可能在做什么。请更新您的问题,并了解除了您向我们展示的内容以外,我们对您的系统不了解。

在这种情况下,您可能会发现moment.js很有用,但是在不看到相关的JavaScript代码的情况下,我无法进行详细说明。