将Date从客户端(Javascript)发送到WebApi的最佳方法是什么?

时间:2016-04-12 09:19:48

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

我需要在没有时间的情况下向Web Api发送日期以获取数据w.r.t到目前为止发送。 发送它有两种方法。

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

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

  3. 有没有好的选择。

3 个答案:

答案 0 :(得分:3)

在处理日期和时间时,我喜欢使用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

答案 1 :(得分:0)

您需要在服务器端使用DateTimeOffset对象而不是DateTime对象(有关详细信息,请查看this SO答案)。 在客户端,使用moment.js就像这样:moment.utc().format()

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

希望有所帮助:)

答案 2 :(得分:0)

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

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

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