处理javascript和WebApi之间的Datetime数据类型



我想知道以下是否是处理WebApi 2, Javascript和数据库中的日期时间数据类型的正确方法。

DateTime from Javascript to WebApi:

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

DateTime from WebApi to Javascript:

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

WebApi:

传入日期

  • 不做任何事情,只是将数据类型为datetimedatestring存储在数据库列中。

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

  • 没有日期时间操作(只是按照WebApi Json序列化器ex: 2015-10-23T18:30:00返回)。客户端会自动将UTC日期时间转换为本地日期时间

是的,如果你不想处理任何关于用户时区等信息…这是一种可以接受的方式。只要确保任何时候您想要从服务器生成一个用于比较或其他事情的日期,请使用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"类型将日期存储在数据库中。

这样,在服务器或数据库上的任何时间,您都可以获得有关用户时间和时区的所有信息。

你会发现这篇文章很有用

最新更新