JavaScript山区夏令时奇怪的行为

标签 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 -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 开发者工具上看到日期时,我看到了这个:

enter image description here

我尝试过的

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

你们对我接下来应该做什么有什么建议吗?

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

enter image description here

最佳答案

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

date.toISOString();

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

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

关于JavaScript山区夏令时奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22386083/

相关文章:

javascript - Angular Universal ReferenceError - KeyboardEvent 未定义

javascript - 在字符串中查找文本,将其存储在数组中并显示

javascript - Bootstrap 日期选择器。如果日期尚未加载,则选择当前日期作为默认日期

c++ - 如何从 boost::posix_time::ptime 获取自纪元时间以来的毫秒数

javascript - 如何用PHP格式化中文的小时和分钟

C++ 时间戳和 diffTime

sql - 如何在rails控制台中获取执行时间?

javascript - 如何使用jquery向下滚动到底部子div

r - 在 dplyr 链中转换 Excel 日期格式

javascript - IndexOf 不适用于两个对象数组