首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript倒计时、时区和夏令时问题

Javascript倒计时、时区和夏令时问题
EN

Stack Overflow用户
提问于 2012-07-27 11:31:21
回答 1查看 2.2K关注 0票数 1

我们的团队在JQuery倒计时方面有很大的问题,我们真的需要一些帮助。

最初,我们有一些ScriptSharp代码来执行此操作。

代码语言:javascript
复制
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小时休息。

为了解决这个问题,我们引入了更多的代码。

认为:

代码语言:javascript
复制
   $(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;
        }
});

在控制器中

代码语言:javascript
复制
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而在此期间更改。

当然,我们不可能是唯一有过这一问题的人。不会这么难的。有人知道解决办法吗?

谢谢,

萨钦

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-28 08:31:21

我没有亲自处理过相同的场景,但是看到日期、时区问题等会自动触发人们对使用本地日期对象(而不是UTC Date对象)产生的一些潜在问题的思考。

IMO,如果所有计算、日期序列化只在UTC空间中工作,那么情况就更好了;最后,当要从用户那里显示日期时,就会根据场景将其转换为本地时区或适当时区。另一方面,用户输入本地或某些时区相对项,并立即将其转换为UTC作为内部表示形式。这避免了应用程序的不同层/层之间的各种混淆。

这并不是真正解决你的具体问题,但也许一些考虑的东西,可能会导致一个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11686903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档