我们的团队在 JQuery 倒计时方面遇到了大问题,我们真的需要一些帮助。
最初,我们有一些执行此操作的 ScriptSharp 代码
JQueryCountdownOptions opts = new JQueryCountdownOptions();
opts.Layout = "<ul class=\"group\"> <li>{dn} <span>{dl}</span></li> <li>{hn} <span>{hl}</span></li> <li>{mn} <span>{ml}</span></li> <li>{sn} <span>{sl}</span></li> </ul>";
opts.Until = Number.ParseInt(timeLeft);
jQuery.Select("#countdownclock").Plugin<JQueryCountdown>().Countdown(opts);
jQuery.Select("#countdownclock").Show();
jQuery.Select("#bidBox").RemoveAttr("disabled");
我们注意到的是,这使用客户端的时钟进行倒计时。因此,如果客户决定提前 5 小时更改他的时间,那么倒计时将是 5 小时。
为了解决这个问题,我们引入了更多代码
在视图中:
$(function () {
var expires = new Date(@year, @month, @day, @hours, @minutes, @seconds);
$('#clockDiv').countdown({ until: expires, timeZone: null, serverSync: serverTime, onTick: serverTime, tickInterval: 60 });
function serverTime() {
var time = null;
$.ajax({ url: '/Auction/SyncServerTime',
async: false, dataType: 'json',
success: function (result) {
time = new Date(result.serverTime);
}, error: function (http, message, exc) {
time = new Date();
}
});
return time;
}
});
在控制器中
public JsonResult SyncServerTime()
{
var result = new JsonResult
{
Data = new
{
serverTime = DateTime.Now.ToString("MMM dd, yyyy HH:mm:ss zz")
},
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
return result;
}
此代码确保无论用户将时钟设置为什么,倒数计时器都会定期同步到服务器的时间。问题解决了。
唯一的问题是我们提出了其他问题。
问题在于,当用户处于不同的时区时,这些用户的倒计时会根据他们的时区所具有的时区偏移量而有所不同。我们已尝试更改各种参数,但仍然存在问题。更糟糕的是,如果我的时间跨度跨越了应用夏令时的日期,那么事情就会再次出错,无论是在同一时区还是在不同时区。我们已经尝试了不同的代码和参数,所以以上只是我所做的,与我尊敬的同事尝试的不同。我要问的是,肯定有人在某个地方有要求
- 编写一个独立于客户端时间并基于服务器时间的倒计时。
- 无论用户在哪个时区,都显示相同的剩余天数、小时数、分钟数、秒数
- 显示由于 DST 而在此期间时间将更改的用户与由于 DST 而在此期间内时间不会更改的用户的剩余天数、小时、分钟、秒数相同
- 显示用户的实际剩余天数、小时数、分钟数和秒数,该用户的时间将在此期间因 DST 而发生变化。
当然,我们不可能是唯一遇到过这个问题的人。不可能这么难。有谁知道解决方案?
谢谢,
萨钦