我想知道以下是否是在 WebApi 2、Javascript 和数据库中处理日期时间数据类型的正确方法。
从 Javascript 到 WebApi 的 DateTime:
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);
网络接口(interface):
Incoming date
- 什么都不做,只是将返回的
datestring
存储在数据类型为datetime
的数据库列中
Getting date from database and Returning date to client:
- 没有日期时间操作(只需按照 WebApi Json 序列化程序返回: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" 类型将您的日期存储在数据库中。
这样,在服务器或数据库上的任何时间,您都可以获得有关用户时间和时区的所有信息。
你会发现this article 有用
关于javascript - 处理javascript和WebApi 2之间的日期时间数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33340908/