解析DateTime值会为不同的时区呈现不同的日期 - JS

时间:2017-11-07 05:03:36

标签: javascript asp.net-mvc azure parsing datetime

最近,我将一个ASP.NET MVC应用程序迁移到Azure云中。 迁移后我遇到的一个问题是,在JS文件中解析时,DateTime值会为不同的时区呈现不同的值。

注意:无论数据库位置如何,DateTime值都在DB(SQL Server)中以正确的值存储。另外,在C#类中从DB中检索这些值时,也会获取准确的值。

因此它绝对是一个JS解析/渲染问题。

以下是我的JS文件代码: -

function Dateformat(date) {
    var d = new Date(parseInt(date.slice(6, -2)));
    var realdate = '' + (1 + d.getMonth()) + '/' + d.getDate() + '/' + d.getFullYear().toString();
    return realdate;

}

让我们考虑一个例子,其中提取的日期时间值是,例如:

2017-07-10 05:37:16.700

现在这个DateTime值是在C#文件中准确获取的正确值。 因此,在正常情况下,应该为所有时区渲染相同的值。但事实并非如此。

现在我将本地机器设置为

(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi

timezone(这是我的默认设置),通过控制台调试JS给出了以下内容(这是一个正确的值):

enter image description here]

但是当我设置我的时区时,让我们说:

 (UTC-08:00) Pacific Time (US & Canada)

timezone,通过控制台调试JS给出了以下内容(这是一个不正确的值):

enter image description here

它不显示2017-07-10,而是在用户界面中显示2017-07-09。

因此,所有日期时间值都显示为UI中实际日期之前的一个日期。

即使是11月6日的美国用户保存日期,也会看到实际价值之前的一个日期,在这种情况下是11月5日。但同一日期在UTC + 05:30时区准确显示为11月6日(因此,此时区的用户看到正确的值,而前一时区的用户看到的不正确)。

注意:最初在迁移之前,虽然我的应用程序仍在本地,但相同的JS代码会呈现正确的日期时间值,而不管任何时区。

从CSHTML文件和JS文件中调用此JS方法。 例如:

<td class="${setClass(RowNumber)}">${Dateformat(SubmitDate)}</td>

如何在DB中保存DateTime值?

我在C#代码文件中使用 DateTime.Now ,同时在DB中保存日期值。 因此,每当用户输入一些数据时,日期将根据他的时区保存。现在,在显示该日期时,它应该为全球所有用户显示相同的日期值。

如何解决此问题? 在Azure中配置应用程序时,这是否与我们为Azure门户中的资源组设置的“区域”值相关联?

1 个答案:

答案 0 :(得分:0)

根据评论中 @Jaromanda X 的解决方案,我使用UTC日期格式来解决此问题。

这是我更新的解决方案:

function Dateformat(date) {
    var d = new Date(parseInt(date.slice(6, -2)));
    var realdate = '' + (1 + d.getUTCMonth()) + '/' + d.getUTCDate() + '/' + d.getUTCFullYear().toString();
    return realdate;
}