我正在使用Keith Woods倒数计时器(http://keith-wood.name/countdown.html)和serverSync功能。这似乎在一个国家很有效,但是当我查看来自不同国家的倒计时时,似乎有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
});
});
答案 0 :(得分:2)
你必须自己处理时区问题。倒计时会自动应用这些设置according to the docs:
此日期和时间应考虑服务器的时区,并且该时间与客户端之间的任何差异将在启动或更改时应用于倒计时。
因此,客户端的时区会被考虑在内,因为脚本是根据客户端的设置加载的。
使用更多编辑:
在不知道您的确切代码的情况下我无法确定,但您应该将其设置为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