0

我正在使用带有 serverSync 功能的 Keith Woods 倒数计时器 (http://keith-wood.name/countdown.html)。这似乎在一个国家/地区效果很好,但是当我检查来自不同国家/地区的倒计时时,似乎有 15 小时的差异。

因此,在澳大利亚,倒计时显示 1 天,但在美国,倒计时显示 1 天 15 小时。我已经完全按照网站上的说明实现了服务器端代码,但仍然存在时间差异。如果我更改本地时钟,它会更改倒计时时间,但是当点击刷新时,倒计时显示正确的时间量,所以我知道它正在获取服务器时间。但是在美国还是有时差的。

如果它读取服务器时间,任何想法为什么会这样?

function serverTime() { 
  var time = null; 
  $.ajax({url: 'server-time.php?random=' + Math.floor(Math.random() * 1000000), 
       async: false,
       dataType: 'text', 
       success: function(text) { 
          time = new Date(text); 
       }, error: function(http, message, exc) { 
          time = new Date(); 
       }}); 
       return time; 
    }

    var launchDate = "";

    $(function () {
       launchDate = new Date(
           2012,
           5-1,
           22,
           11
       );
       $('#launchCountdown').countdown('destroy')
       $('#launchCountdown').countdown({
                until: launchDate,
                serverSync: serverTime,
                format: 'DHMS', 
                expiryText: '<p>It\'s all over</p>'
                //onTick: highlightLast5
            });
        });
4

1 回答 1

2

您必须自己处理时区问题。Countdown 将根据文档自动应用这些设置:

此日期和时间应考虑服务器的时区,并且该时间与客户端时间之间的任何差异都将应用于倒计时启动或更改。

因此会考虑客户端的时区,因为脚本是根据客户端的设置加载的。

编辑更多:

在不知道您的确切代码的情况下我无法确定,但是您应该将其设置为 GMT,然后偏移到您的服务器时间一次,而不是将其设置为您的服务器时间,这解决了自动偏移到每个时区的问题,您不想要。所以使用直到

$(selector).countdown({ 
    until: new Date(2012, 8 - 1, 8)}); // add a date object with a timezone
$(selector).countdown({ 
    // create the offset based on your server timezone (e.g Sydney)
    // this overrides servertime with a static value that you want
    until: $.countdown.UTCDate(+10, 2012, 1 - 1, 26),  timezone: +10}); 
$(selector).countdown({until: '+1m -1d'}); // set it to one one day from now
于 2012-05-15T05:59:41.720 回答