私たちのチームは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のためにこの期間に時間が変更されるユーザーの実際の残り日数、時間、分、秒を表示します。
確かに、これまでにこの問題を抱えたのは私たちだけではありません。これほど難しいことはありません。誰かが解決策を知っていますか?
ありがとう、
サチン