JSON.stringify更改日期

时间:2015-08-07 12:17:23

标签: javascript json asp.net-mvc date datetime

我有一个网站,它具有登录特定时区的功能,无论客户端的时区是什么。

现在, 在用户在对话框中选择日期的网站中。我使用带有其他几个属性的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

但我无法理解该公式是如何运作的。因此,获取更多详细信息并使用某些特定解决方案会更好。

要求: -

我允许用户只选择日期。 我希望通过服务器端收到相同的日期。

我怎样才能做到这一点?如果可能,请详细说明。

有没有简单的方法来避免这种碰撞?

2 个答案:

答案 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);