创建一个倒计时,无论在哪个国家/地区,剩余时间都相等

create a countdown that the remain time is equal no mather the country

我可以想象有人已经回答了这个问题,或者它可以被认为是一个重复的问题,我已经搜索了几周但我不知道如何完成这个。

我有一个用 js 制作的倒计时,我面临的问题是每当我在另一个国家测试它时,时间都会抛出不同的时间示例。

我在中美洲,结束日期是 2018 年 4 月 16 日 23:59:59" 如果我​​在中美洲测试它,它说还剩 6 天 10 小时,如果我 运行 在意大利例如它说还剩 6 天 3 小时,我需要它始终相等并且时区不影响,这甚至可能吗,请帮助如何完成它。

我的脚本正在运行,但不是我需要的方式,我有一个促销将在 "apr 16, 2018 23:59:59" 到期,所以如果它只剩下 5 小时,它会大声说还有 5 小时,无论它在哪里一直在看,但这并没有发生。

$("#masterslider").append("<p id='demo'>.</p>")
  $("#masterslider").append("<span> remaining time  </span>")

//******************************** update date here ************************
var serverDate = new Date("apr 16, 2018 23:59:59");
var offset = serverDate.getTimezoneOffset();
serverDate = addOffset(serverDate, offset);

 setInterval(function(){
    updateCountdown();
}, 1000);

 function addOffset(date, offset) {
    var time = date.getTime() ;
 return new Date(time + offset  * 6000);
}

 function updateCountdown() {
 var userDate = new Date();

    var distance = serverDate.getTime() - userDate.getTime();

    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);


  if(serverDate.getTime()  > userDate.getTime()){

       $('#demo').html( days +"day(s)"+ " / " + hours + "hour(s)"  + minutes + "minutes(s)");

  }
   else 
  {
   $("#demo").html(mas); 
   $("#masterslider span").hide();
 }


 }
 </script>

您可以使用 CDN or use NPM

中的 moment-timezone

repl.it sample

const moment = require("moment-timezone");

function toTimeZone(time, offset) {
    var format = 'YYYY/MM/DD HH:mm:ss ZZ';
    return moment(time, format).utcOffset(offset).format(format);
}

toTimeZone("2018/04/10 15:37", "+0730")

我已经检查并为 "event timestamp" 设置了正确的时区,无论我使用的本地客户端时区如何都对我有效。

let targetDate = new Date("2018-04-11 23:59:59 GMT-0800");
let refreshDelayMs = 1000;
function updateCounter() {
   let distance = (targetDate - new Date()) / 1000;
   let seconds = Math.floor(distance % 60).toString().padStart(2, '0');
   distance = distance / 60;
   let minutes = Math.floor(distance % 60).toString().padStart(2, '0');
   distance = distance / 60;
   let hours = Math.floor(distance % 24).toString().padStart(2, '0');
   let days = Math.floor(distance / 24).toString().padStart(2, '0');
   document.querySelector('.counter').innerHTML = `${days} days ${hours}:${minutes}:${seconds}`;
   setTimeout(updateCounter, refreshDelayMs);
}

updateCounter();
Remains: <span class="counter"></span>