【问题标题】:JavaScript Mountain Daylight Saving Time odd behaviorJavaScript 山区夏令时奇怪的行为
【发布时间】:2014-04-18 15:03:51
【问题描述】:

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

问题

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

self.toUTC = function (date) {

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

    return utc;
};  

当我在 Chrome 中查看开发者工具时,我看到:

奇怪的是,当我从数据库收到日期并将其转换回本地时间时,由于夏令时,它获取了丹佛的正确 GMT,即 GMT -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() 它不会改变任何东西,因为当我抓取日期并将其设置在新的 Date JavaScript 对象中时,它已经将其设置为 GMT -0700:

【问题讨论】:

  • now.getTimezoneOffset() 返回什么?所有浏览器都一样吗?
  • 是的 420 适用于所有浏览器,这意味着 GMT -0700
  • 您能否举例说明您希望如何使用toUTC() 函数?我不认为这样的功能是必要的。您可以使用 getUTCHours()getUTCMinutes() 来获取 UTC 时间..
  • 关于照片和你尝试了什么的好问题。我喜欢。
  • @euther 您没有显示想要使用toUTC() 函数的代码。请使用 toUTC 显示行为不正确的代码。

标签: javascript date time momentjs


【解决方案1】:

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

date.toISOString();

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

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

【讨论】:

  • 仍以 GMT -0700 获取日期,请参阅我的编辑以获取更多信息
猜你喜欢
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-27
相关资源
最近更新 更多