如何在使用Javascript设置/获取值时使日期时间字段与时区无关

How to make datetime fields neutral to timezone when using Javascript to set/get value

本文关键字:字段 时间 日期 时区 获取 Javascript 设置      更新时间:2023-09-26

在我的项目中,有几个日期时间类型的字段,比如航班的出发/到达日期和时间,这些字段应该与用户编辑它们时完全相同。

我使用ASP.NET MVC3和dojo来构建应用程序。在后端,我可以将给定的值处理为UTC时间,并将其保存到DB中。但当它使用Json传递到前端时,Javascript似乎将其调整为本地时间,页面上的日期/时间选择器显示调整后的值。似乎当我使用新日期(…)时,它会自动调整为本地时间。

下面是我在页面上使用的解析函数(因为ASP.NET MVC3的JsonRest返回的日期类似于"/date(4643712000000)/")。

function (/*string*/dateStr) {
        if (!dateStr) {
            return dateStr;
        }
        var jsonResultPattern = /Date'([+-]?('d+)')/;
        if (dateStr.match(jsonResultPattern)) {
            return new Date(parseInt(dateStr.substr(6)));
        }
        else {
            return dateStr;
        }
    },

我该如何实施这种情况?是否有最佳实践或示例?

将UTC时间的返回值更改为以下值:

return new Date(parseInt(dateStr.substr(6))).toUTCString();

javascript中的所有日期都在内部存储为UTC。如果您希望函数返回实际日期对象,并且您在小部件中使用某些方法(如getFullYear()),它会将其转换为本地时间。如果你想让它保持在UTC,你必须使用UTC方法,例如:

dateObj.getUTCFullYear();          // Year as a 4-Digit Number
dateObj.getUTCMonth();             // Month as a number from 0 - 11
dateObj.getUTCDate();              // Day of the Month as a number from 1 - 31
dateObj.getUTCDay();               // Day of the Week as a number from 0 - 6
dateObj.getUTCHours();             // Hours as a number from 0 - 23
dateObj.getUTCMinutes();           // Minutes as a number from 0 - 59
dateObj.getUTCSeconds();           // Seconds as a number from 0 - 59
dateObj.getUTCMilliseconds();      // Milliseconds as a number from 0 - 999
dateObj.toUTCString();             // The entire Date as a string in UTC

如果要设置对象,请使用与上面相同的方法,但将单词get更改为set(例如-dateObj.setUTCFullYear(1984);)。