我們的團隊在JQuery倒計時方面遇到很大問題,我們確實需要一些幫助。Javascript倒計時和時區和夏令時問題
最初,我們有一些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而在此期間時間將會改變的用戶的天數,小時數,分鐘數和秒數。
當然,我們不可能是唯一有過這個問題的人。這不可能很難。有誰知道解決方案?
感謝,
薩欽
希望這會有所幫助。 http://stackoverflow.com/questions/4110039/javascript-dates-what-is-the-best-way-to-deal-with-daylight-savings-time – xiaowl 2012-07-27 11:47:34