提问者:小点点

JavaScript山夏令时奇行为


我从一个数据库收到一个日期,它有一个UTC格式的时间。 日期对我来说无关紧要我只需要小时和分钟。

问题

当我将日期发送到数据库时,我使用以下函数将其从本地时间转换为UTC:

self.toUTC = function (date) {

    var now = new Date(date);       
    var utc = new Date(now.getTime() + now.getTimezoneOffset() * 60000);

    return utc;
};  

当我查看Chrome的开发工具时,我看到了以下内容:

奇怪的是,当我从数据库接收到日期并将其转换回当地时间时,它获取了正确的丹佛格林尼治时间,因为夏令时,格林尼治时间-0600。 我为它使用了这个函数:

//converts date to just time in utc format to include in menu
self.setTimeForMenu = function (dateUTC) {

    var date = new Date(dateUTC + ' UTC');          

    var hours = (date.getHours()<10?'0':'') + date.getHours();
    var minutes = (date.getMinutes()<10?'0':'') + date.getMinutes();

    return hours + ':' + minutes;
};      

当我看到Chrome开发工具上的日期时,我看到的是这样的:

我所尝试的

  1. 以上JavaScript函数的组合
  2. moment.js,但我得到了相同的结果

你们有谁对我下一步该做什么有建议吗?

编辑1
如果我使用now.ToUtcString()或now.ToISOString(),它不会更改任何内容,因为当我获取日期并在一个新的日期JavaScript对象中设置它时,它已经将它设置为GMT-0700:


共1个答案

匿名用户

当您将日期发送回服务器时,应该将其作为ISO UTC字符串发送,只需使用

Date.ToisoString();

如果需要显示UTC时间,可以只使用date.Getutchours()date.GetutcMinutes()

我认为没有必要将JS日期转换为UTC。 也就是说,JS不允许您在特定的区域设置(UTC或任何其他)中创建日期,只允许您的计算机设置为的日期。 也就是说,GetTimeZoneOffset()始终用于本地时间。