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

Shy*_*ikh 9 javascript c# datetime asp.net-web-api

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

从Javascript到WebApi的DateTime:

var date = new Date();
var datestring = date.toISOString();
//Send datestring to WebApi
Run Code Online (Sandbox Code Playgroud)

从WebApi到Javascript的DateTime:

//on getting datetime value from `http.get` call 
var dateFromServer = new Date(dateFromServer); 
Run Code Online (Sandbox Code Playgroud)

的WebAPI:

进入日期

  • 什么都不做只是将datestring返回的数据库列存储为数据类型datetime

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

  • 没有日期时间操作(根据WebApi Json序列化程序返回:2015-10-23T18:30:00).客户端会自动将UTC日期时间转换为本地日期时间

Ane*_*lou 9

是的,如果您不想处理有关用户Timezone等的任何信息......这是一种可接受的方式.只要确保您希望从服务器生成日期以进行比较或其他任何时候使用c#DateTime.UtcNow 方法.我认为拥有"全球UTC公约"是一个非常安全和良好的解决方案,但它有一些限制.

例如,如果您想在上午09:00(在每个用户的国家/地区)提醒位于不同时区的所有用户,则无法知道每个用户的"09:00".

解决这个问题的一种方法(也就是我喜欢的方法)是将每个用户的时区信息分别存储在数据库中,每次想要进行比较时只需转换时间.

TimeZoneInfo.ConvertTimeFromUtc(time, this.userTimezone);
Run Code Online (Sandbox Code Playgroud)

或者,如果要在服务器上存储所有时区信息,您可以:

使用以下格式将您的日期从javascript发送到服务器: "2014-02-01T09:28:56.321-10:00" ISO 8601还通过将Z替换为时区偏移的+或 - 值来支持时区.

使用"DateTimeOffset"类型声明您的WEB API 2日期类型.

最后使用"datetimeoffset"类型将日期存储在数据库中.

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

你会发现这篇文章很有用