1

私たちのチームは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;
        }

このコードは、ユーザーが自分の時計をカウントダウンタイマーに設定しても、サーバーの時刻と定期的に同期することを保証します。問題が解決しました。

唯一の問題は、他の問題を考え出したことです。

問題は、ユーザーが異なるタイムゾーンにいる場合、それらのユーザーのカウントダウンは、タイムゾーンが持つタイムゾーンオフセットに応じて異なることです。あらゆる種類のパラメータを変更しようとしましたが、まだ問題があります。さらに悪いことに、夏時間が適用される日付に私のタイムスパンがまたがると、同じタイムゾーンの人と異なるタイムゾーンの人の両方で事態が再び悪化します。私たちはさまざまなコードとパラメーターを試したので、上記は私が行ったことであり、尊敬されている同僚が試したものとは異なります。私が求めているのは確かに、どこかで誰かが

  1. クライアント時間に依存せず、サーバー時間に基づくカウントダウンを記述します。
  2. ユーザーがどのタイムゾーンにいるかに関係なく、残りの同じ日数、時間、分、秒数を表示します
  3. DSTのためにこの期間に時間が変更されるユーザーと、DSTのためにこの期間に時間が変更されないユーザーの残りの同じ日数、時間、分、秒数を表示します
  4. DSTのためにこの期間に時間が変更されるユーザーの実際の残り日数、時間、分、秒を表示します。

確かに、これまでにこの問題を抱えたのは私たちだけではありません。これほど難しいことはありません。誰かが解決策を知っていますか?

ありがとう、

サチン

4

1 に答える 1

1

私は個人的に同じシナリオを扱っていませんが、日付、タイムゾーンの問題などがポップアップ表示されると、UTC日付オブジェクトではなくローカル日付オブジェクトの使用に起因するいくつかの潜在的な問題についての考えが自動的にトリガーされます。

IMO、すべての計算、日付のシリアル化がUTC空間でのみ機能し、最終的にユーザーからの日付を提示する場合、シナリオに応じてローカルまたは適切なタイムゾーンに変換されると、状況はさらに良くなります。反対に、ユーザーはローカルまたはタイムゾーンの相対エントリを入力すると、すぐに内部表現としてUTCに変換されます。これにより、アプリのさまざまなレイヤー/ティア間でのあらゆる種類の混乱を回避できます。

それは実際にはあなたの特定の問題に対する解決策ではありませんが、おそらくそれが問題につながる可能性があると考える何かです。

于 2012-07-28T08:31:21.707 に答える