You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多时区同步倒计时实现求助(GMT/PT/EST)

解决方案:跨时区同步倒计时计时器

问题根源

你的原代码中,new Date("Nov 17, 2023 20:00:00")会被浏览器解析为本地时区的时间——也就是说,GMT时区的用户看到的结束时间是GMT的20:00,PT时区的用户看到的是PT的20:00,这本质是不同的UTC时间点,导致倒计时无法同步。

要实现跨时区同步结束,必须将目标时间固定为统一的UTC时间点,让所有时区的浏览器都基于这个UTC时间计算倒计时。

修改后的代码

<p id="demo"></p>

<script>
// 设定统一的UTC结束时间(这里表示UTC时间2023年11月17日20:00:00)
// 方式1:使用Date.UTC构造(月份为0基,11月对应10)
var countDownDate = new Date(Date.UTC(2023, 10, 17, 20, 0, 0)).getTime();

// 方式2:使用ISO 8601格式字符串(Z表示UTC时区)
// var countDownDate = new Date("2023-11-17T20:00:00Z").getTime();

// 每秒更新倒计时
var x = setInterval(function() {
  // 获取当前时间的时间戳(基于UTC,不受本地时区影响)
  var now = new Date().getTime();
    
  // 计算剩余时间
  var distance = countDownDate - now;
    
  // 时间换算(天、时、分、秒)
  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);
    
  // 输出结果
  document.getElementById("demo").innerHTML = days + "d " + hours + "h "
  + minutes + "m " + seconds + "s ";
    
  // 倒计时结束处理
  if (distance < 0) {
    clearInterval(x);
    document.getElementById("demo").innerHTML = "EXPIRED";
  }
}, 1000);
</script>

关键修改说明

  • 固定UTC时间点:通过Date.UTC()或带Z的ISO字符串,确保所有浏览器解析到的是同一个UTC时间,而非本地时区时间。
  • 时间戳计算:getTime()返回的是从UTC 1970年1月1日至今的毫秒数,不受本地时区影响,因此countDownDate - now的差值在所有时区都是一致的,保证倒计时同步。
  • 保留天数显示:原代码未输出天数,若倒计时周期较长,建议保留天数展示,避免小时数溢出(比如超过24小时的情况)。

内容的提问来源于stack exchange,提问作者Daniel Rogerson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 02:34:54