我有一个网站,它具有登录特定时区的功能,无论客户端的时区是什么。
现在, 在用户在对话框中选择日期的网站中。我使用带有其他几个属性的JSON.stringify将其发送到服务器端。
但是无论何时在服务器端接收日期都会改变。
示例: -
我使用(+05:30)印度时区" 01/08/2015 00:00:00"和服务器正在使用卡萨布兰卡时区。
当在服务器端收到日期时,日期将减少1" 31/08/2015"。
我认为这是因为时区转换。
我已经检查过以下链接: -
JSON Stringify changes time of date because of UTC
我已经尝试过这个答案: - https://stackoverflow.com/a/1486612/2592727
但我无法理解该公式是如何运作的。因此,获取更多详细信息并使用某些特定解决方案会更好。
要求: -
我允许用户只选择日期。 我希望通过服务器端收到相同的日期。
我怎样才能做到这一点?如果可能,请详细说明。
有没有简单的方法来避免这种碰撞?
答案 0 :(得分:2)
使用格式yyyy-mm-dd hh:mm:ss,无论时区如何,你都不会再这样做了
答案 1 :(得分:1)
JSON.stringify
方法将日期作为UTC存储在字符串中,当您在.NET中解析时,您将得到一个DateTime
,其中包含完全相同的时间点,但转换为本地服务器的时间。
您可以通过两种方式处理此问题,您可以将时间转换回原始时区,也可以避免使用Date
数据类型。
当然,转换为原始时区需要您知道时区是什么。例如:
var zone = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");
DateTime userTime = TimeZoneInfo.ConvertTimeFromUtc(date.ToUniversalTime(), zone);
为避免使用Date
类型,您可以在将序列化之前将日期格式化为字符串。例如:
var s = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
在服务器端,您将使用相同的格式解析字符串:
DateTime userTime = DateTime.ParseExact(date, "yyyy-M-d", CultureInfo.InvariantCulture);