如何让 JavaScript 的 New Date() 函数在不同时区显示相同? [复制]
Posted
技术标签:
【中文标题】如何让 JavaScript 的 New Date() 函数在不同时区显示相同? [复制]【英文标题】:How do you make JavaScript's New Date() function display the same in different timezones? [duplicate] 【发布时间】:2013-05-05 19:00:57 【问题描述】:我正在为我的网络应用构建一个时间线,我正在使用以下方法操作添加到时间线的元素:
var time_going = new Date(data2.time_going * 1000),
time_going_hour = time_going.getHours(),
time_going_minutes = time_going.getMinutes(),
left_position = (time_going_hour * width_by_hour) + (time_going_minutes * width_by_minute);
问题是 left_position 根据您当前的时区不同,因为新的日期函数返回不同的信息。是否有强制时间始终与纽约时间一致?
data2.time_going 在 Unix 时间戳中,例如设置为 1368687333。
【问题讨论】:
这些帖子似乎要求您知道将时间转换为哪个时区。我想要一些可以自动检测时区然后正确调整时间的东西。 所以无论用户身在何处,您都希望显示纽约时间? 杰森,我很困惑。在你的帖子中,你说你想把它强制到纽约时间。在您的评论中,您说您希望它检测用户的时区。是哪个? 【参考方案1】:您可能已经知道,UNIX“纪元”时间没有时区。这使得处理 UNIX 时间戳变得容易,因为您永远不必跟踪它们所在的时区。
同样,javascript Date 对象与时区无关。当您调用getHours()
时,该方法正在为当前机器的时区进行时间偏移数学运算。
因此,与其总是使用纽约时间,不如使用 UTC 时区来计算所有时间。换句话说,不要使用依赖于语言环境的getHours()
和getMinutes()
,而是尝试使用getUTCHours()
和getUTCMinutes()
。只要您使用 UNIX 纪元时间初始化 Date 对象,这些方法将始终返回相同的值,无论它们运行的机器的时区如何。
【讨论】:
以上是关于如何让 JavaScript 的 New Date() 函数在不同时区显示相同? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript 的 new date() 和 date() 为啥输出不一样?
JavaScript 中 Date() 和New Date()有啥区别?