在JavaScript和WebApi 2之间处理日期时间数据类型

10

我想知道在WebApi 2、JavaScript和数据库中处理日期时间数据类型的方法是否正确。

从JavaScript将DateTime发送到WebApi:

var date = new Date();
var datestring = date.toISOString();
//Send datestring to WebApi

从WebApi到JavaScript的日期时间:

//on getting datetime value from `http.get` call 
var dateFromServer = new Date(dateFromServer); 

WebApi:

传入日期

  • 仅存储以datetime数据类型为列返回的datestring,不执行任何操作。

从数据库获取日期并将日期返回给客户端:

  • 不进行时间处理(直接按照 WebApi Json 序列化器返回,例如:2015-10-23T18:30:00)。客户端会自动将 UTC 日期转换为本地日期时间。
1个回答

9
如果您不想处理有关用户时区等信息,那么这是一种可接受的方式。只需确保每当您需要从服务器产生日期进行比较或其他操作时,请使用c#DateTime.UtcNow方法。我认为拥有“全球UTC公约”是一种相当安全和好的解决方案,但它也有一些限制。
例如,如果您想在每个用户所在的国家的上午09:00提醒所有用户(位于不同的时区),则无法知道何时对于每个用户来说是“09:00”。
解决此问题的一种方法(也是我喜欢的方法)是将每个用户的时区信息手动存储在数据库中,并且每次要进行比较时只需转换时间即可。
TimeZoneInfo.ConvertTimeFromUtc(time, this.userTimezone);

如果您想在服务器上存储所有时区信息,可以选择以下方法: 使用以下格式将日期从javascript发送到服务器:"2014-02-01T09:28:56.321-10:00"。 ISO 8601还通过用带有+或-值的时区偏移量替换Z来支持时区。 使用"DateTimeOffset"类型声明WEB API 2日期类型。 最后,使用"datetimeoffset"类型在数据库中存储日期。 这样一来,不论是服务器上还是数据库中,您都拥有关于用户时间和时区的所有信息。 您会发现这篇文章非常有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接