【问题标题】:DateTime from WebApi to Breeze is transformed with the Time Localization从 WebApi 到 Breeze 的 DateTime 通过时间本地化进行转换
【发布时间】:2013-10-01 04:57:59
【问题描述】:

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

在 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"

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

编辑:

here 对 javascript 中的日期时间发生了什么有很好的解释。

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

【问题讨论】:

  • 请显示一些代码,以便我们了解您所描述的内容。另外,检查这些值,它们看起来并不完全有效。缺少一些数字,格式不标准。此外,没有“本地 GMT”之类的东西。
  • 我添加了 .net 代码和更好的示例。对不起第一篇文章,我真的很懒

标签: breeze asp.net-web-api


【解决方案1】:

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

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

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

【讨论】:

  • 您好,我没有添加任何 javascript,因为我使用的是breeze.js。保存数据并将数据发送到服务器时,微风负责管道和日期转换。因此微风的标签
【解决方案2】:

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

这在答案posted here 中有更详细的讨论。

【讨论】:

    猜你喜欢
    • 2018-11-12
    • 1970-01-01
    • 2013-09-12
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 2015-08-27
    相关资源
    最近更新 更多