提问人:Daniel Rogerson 提问时间:11/17/2023 更新时间:11/19/2023 访问量:45
显示不同时区的倒计时
displaying countdown in different time zones
问:
我正在运行一个倒数计时器,用于 3 个时区(GMT、PT、EST),我需要它进行同步,以便每个时区的计时器在同一时间结束。这是我下面的代码。这是时间敏感的(没有双关语),所以提前感谢!
<p id="demo"></p>
<script>
// Set the date we're counting down to
var countDownDate = new Date("Nov 17, 2023 20:00:00").getTime();
// Update the count down every 1 second
var x = setInterval(function() {
// Get today's date and time
var now = new Date().getTime();
// Find the distance between now and the count down date
var distance = countDownDate - now;
// Time calculations for days, hours, minutes and seconds
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
// Output the result in an element with id="demo"
document.getElementById("demo").innerHTML = hours + "h "
+ minutes + "m " + seconds + "s ";
// If the count down is over, write some text
if (distance < 0) {
clearInterval(x);
document.getElementById("demo").innerHTML = "EXPIRED";
}
}, 1000);
</script>
答:
0赞
smallpepperz
11/17/2023
#1
Unix 纪元(返回的内容)是一个与时区无关的值。代码在时区之间出现差异的原因是构造日期的方式。如果在日期字符串中指定时区,则无论它在哪个时区运行,它都将映射到相同的 unix 时间戳。Date.getTime()
console.log("Old", new Date("Nov 17, 2023 20:00:00").getTime()) // Changes based on timezone
console.log("New", new Date("Fri Nov 17 2023 20:00:00 GMT+0000").getTime()) // Will always return 1700251200000
new Date().getTime()
也不会受到时区的影响,请参阅 javascript “(new Date()).getTime()” 是否从 2 个不同的时区运行
根据 @RobG 的评论,您应该更改日期的编写方式以匹配 EMCAScript 规范,以便保证正确解析不同的 Javascript 实现
评论
1赞
RobG
11/18/2023
“Nov 17, 2023 20:00:00”不是 ECMA-262 支持的格式,因此解析取决于实现。添加“UTC”来指定偏移量同样存在问题。在支持的格式中,它将是“2023 年 11 月 17 日星期五 20:00:00 GMT+0000”。
0赞
smallpepperz
11/19/2023
感谢您@RobG指出这一点,我已经更新了我的答案以包括它。
评论
Nov 17, 2023 20:00:00
UTC
GMT+0000