我从具有 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 开发者工具上看到日期时,我看到了这个:
我尝试过的
- 上述 JavaScript 函数的组合
- moment.js 但我得到了相同的结果
你们对我接下来应该做什么有什么建议吗?
编辑 1
如果我使用 now.toUTCString() 或 now.toISOString() 它不会改变任何东西,因为当我获取日期并将其设置在新的 Date JavaScript 对象中时,它已经将其设置为 GMT -0700:
最佳答案
当您将日期发送回服务器时,您应该将其作为 ISO UTC 字符串发送,只需使用
如果需要显示UTC时间,可以使用date.getUTCHours()
或者date.getUTCMinutes()
我认为不需要将 JS 日期转换为 UTC。也就是说,JS 不允许您在特定语言环境(UTC 或任何其他语言环境)中创建日期,只能是您的计算机设置的日期。也就是说,getTimeZoneOffset()
始终针对本地时间。
关于JavaScript山区夏令时奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22386083/