JavaScript Mountain夏令时奇怪的行为

时间:2014-03-13 17:17:19

标签: javascript date time momentjs

我从数据库中收到一个日期为UTC格式的日期。 这个日期与我无关,我只需要时间和分钟。

问题

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

self.toUTC = function (date) {

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

    return utc;
};  

当我查看Chrome中的开发者工具时,我看到了这一点:

enter image description here

奇怪的是,当我从数据库收到日期并将其转换回当地时间时,由于夏令时,它会抓取正确的GMT GMT GMT -0600 GMT。我使用这个功能:

//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开发者工具上看到日期时,我会看到:

enter image description here

我尝试了什么

  1. 上述JavaScript函数的组合
  2. moment.js但我得到了相同的结果
  3. 你们有没有对我接下来要做什么的建议?

    编辑1
    如果我使用now.toUTCString()或now.toISOString()它不会改变任何东西,因为当我抓住日期并在新的Date JavaScript对象中设置它时它已经将它设置为GMT -0700:

    enter image description here

1 个答案:

答案 0 :(得分:0)

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

date.toISOString();

如果您需要显示UTC时间,可以使用date.getUTCHours()date.getUTCMinutes()

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