2

我有一个表格,我在上面为实体设置了开始日期和结束日期。

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

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(GTB 夏令时间)
  • 结束:2013 年 9 月 27 日星期五 02:59:58 GMT+0300(GTB 夏令时间)

这就是我从服务器返回的

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

我如何确保我的对象中的时间没有被修改?

编辑:

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

最后我用这个片段来解决我的问题:breeze.DataType.parseDateFromServer = function (source) { var date = moment(source); 返回日期.toDate(); }; 它通过向日期时间添加时间偏移来覆盖微风自己的功能。

4

2 回答 2

1

Breeze 不会以任何方式操纵进出服务器的日期时间,除非将 UTZ 时区说明符添加到从服务器返回但还没有的任何日期。这样做只是因为不同的浏览器会以不同的方式解释没有时区说明符的日期,并且我们希望浏览器之间保持一致。

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

于 2013-09-27T00:25:28.017 回答
0

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

如果您正在寻找有用的响应,您仍然需要显示更多代码。您当前从 .NET 中描述的内容与您提供的时间戳不完全一致。似乎这个问题的大部分都与 JavaScript 有关,而您还没有显示任何代码,所以我只能猜测您可能在做什么。请更新您的问题,并了解除了您向我们展示的内容外,我们对您的系统一无所知。

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

于 2013-09-25T17:17:53.443 回答