显示不同时区的倒计时

displaying countdown in different time zones

提问人:Daniel Rogerson 提问时间:11/17/2023 更新时间:11/19/2023 访问量:45

问:

我正在运行一个倒数计时器,用于 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>
JavaScript 日期 时间

评论

1赞 Titus 11/17/2023
倒计时应该在什么时候结束?如果是,您如何获得该值以及它在哪个时区?Nov 17, 2023 20:00:00
0赞 Daniel Rogerson 11/17/2023
@Titus它应该在格林威治标准时间晚上 8 点结束,在其他时区查看时,计算应与格林威治标准时间晚上 8 点同步结束。我意识到我没有包括时区啊哈
0赞 Titus 11/17/2023
在这种情况下,您可以使用 SallPepperZ 的建议,但不要添加到日期字符串中。UTCGMT+0000

答:

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指出这一点,我已经更新了我的答案以包括它。