【问题标题】:What is the best way to send Date from client(Javascript) to WebApi将日期从客户端(Javascript)发送到 WebApi 的最佳方式是什么
【发布时间】:2016-08-02 19:20:35
【问题描述】:

我只需要发送没有时间的日期到 Web Api 来获取数据 w.r.t 到日期发送。 有两种发送方式。

  1. 将其转换为 Date.ISOString 并在 webapi 中作为 DateTime 对象接收。 (但是当您将其转换为 ISOString 时,它会删除偏移量 w.r.t UTC),并且当 webApi 收到此日期时间对象时,会将其带入本地时区)。 由于数据库中存储的日期是UTC格式的,我再次需要将其转换为UTC格式进行比较。

  2. 将日期时间作为字符串以 isoformat 发送到 web api,然后将其转换为 utc 格式的 Datetime。 我觉得第二种选择更可靠。

有什么好的选择吗?

【问题讨论】:

    标签: javascript c#-4.0 asp.net-web-api


    【解决方案1】:

    在处理日期和时间时,我喜欢使用moment.js

    这是一个很酷的 JavaScript 库,可帮助您解析、验证、操作和显示日期。

    例子:

    moment().format('MMMM Do YYYY, h:mm:ss a');
    moment().subtract(10, 'days').calendar(); 
    moment().subtract(6, 'days').calendar();
    moment("20111031", "YYYYMMDD").fromNow(); 
    

    您可以使用 utc 格式:

    moment().format();     // 2013-02-04T10:35:24-08:00
    moment.utc().format(); // 2013-02-04T18:35:24+00:00
    

    【讨论】:

    • 我知道有一些时刻的格式,但是当您将其发送到 webAPI 时,它会将其转换为本地时区....实际上我的问题是,将它发送到服务器的最佳方式是按 ISO 中的日期对象格式或作为 ISOFormat 中的字符串
    【解决方案2】:

    您需要在服务器端使用DateTimeOffset 对象而不是DateTime 对象(查看this SO 答案以获取更多详细信息)。 在客户端,也可以像这样使用 moment.js:moment.utc().format()

    使用DateTimeOffset,您将保留所有时区信息而不会丢失任何内容。

    希望对你有帮助:)

    【讨论】:

      【解决方案3】:

      .NET 中的 DateTime 具有 DateTimeKind UTC、Local 和 Unspecified。最后一个非常有用,特别是如果您只想使用这一天并且不想因为意外转换而改变这一天(但也有许多其他原因需要使用它)。

      如果您只是传递没有 TimeOffset 或 UTC 标记的日期时间,通常您的 json 将被转换为 DateTime Unspecified。如果您使用 z(UTC)或 +(时区)传递它,它将使用 UTC 或本地。

      有关 DateTime 的更多想法,另请参阅我写的博客:https://www.linkedin.com/pulse/i-datetimeprovider-arwin-van-arum?trk=prof-post

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-04
        • 1970-01-01
        • 1970-01-01
        • 2011-03-09
        • 1970-01-01
        • 2010-10-13
        • 1970-01-01
        • 2018-01-11
        相关资源
        最近更新 更多