Javascript倒计时,时区和夏令时问题

时间:2012-07-27 11:31:21

标签: javascript jquery countdown script# jquery-countdown

我们的团队在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. ,都会显示相同的天数,小时数,分钟数,秒数
  4. 显示由于DST而导致时间在此期间内发生变化的用户的剩余天数,小时数,分钟数,秒数,因为DST
  5. ,此时间段内的时间不会发生变化
  6. 显示因DST而在此期间内时间会发生变化的用户剩余的实际天数,小时数,分钟数和秒数。
  7. 我们不可能是唯一曾经遇到过这个问题的人。这不可能是这么难。有谁知道解决方案?

    谢谢,

    萨钦

1 个答案:

答案 0 :(得分:1)

我没有亲自处理相同的场景,但是看到日期,时区问题等弹出会自动触发关于使用本地日期对象而不是UTC日期对象产生的一些潜在问题的想法。

IMO,如果所有计算,日期的序列化仅在UTC空间中起作用,最后当从用户呈现日期时,事情会变得更好,根据场景将其转换为本地或适当的时区。在另一方面,用户输入本地或某个时区相对条目,并立即转换为UTC作为内部表示。这避免了应用程序的不同层/层之间的各种混淆。

它并非真正解决您的具体问题,但也许需要考虑的因素可能导致问题。