2012-07-27 113 views
1

我们的团队在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; 
     } 

这段代码确保无论什么用户设置自己的时钟倒数计时器将周期性地同步到服务器的时间。问题解决了。

唯一的问题是我们想出了其他问题。

问题是,当用户在不同的时区时,那些用户的倒计时根据他们的时区具有的时区偏移而不同。我们尝试改变各种参数,但仍然存在问题。更糟糕的是,如果我的时间跨度为夏令时时间的日期,那么情况会再次出现错误,无论是在同一时区还是在不同的时区。我们已经尝试过不同的代码和参数,所以以上就是我所做的,与我尊敬的同事尝试的不同。我所问的肯定是,某处有人必须要求

  1. 写一个独立于客户端时间和服务器时间的倒计时。
  2. 无论用户在什么时区,显示相同的天数,小时,分钟和秒数
  3. 显示在此期间时间将发生变化的用户的剩余天数,小时数,分钟数,秒数由于DST对于在此期间由于DST而在此期间不会改变的用户
  4. 显示实际由于DST而在此期间时间将会改变的用户的天数,小时数,分钟数和秒数。

当然,我们不可能是唯一有过这个问题的人。这不可能很难。有谁知道解决方案?

感谢,

萨钦

+1

希望这会有所帮助。 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

回答

1

我没有处理与个人相同的情况,但看到日期,时区问题等弹出自动触发有关从利用当地的日期而产生一些潜在问题的思考对象,而不是UTC日期对象。

IMO,如果所有的计算,日期序列化只在UTC空间中起作用,并且最终涉及到从用户提交日期,那么情况会更好,它会根据该时间转换为本地或适当时区场景。另一方面,用户输入本地或某个时区的相对入口,并立即将其转换为UTC作为内部表示。这可以避免应用程序不同层/层之间的各种混淆。

它不是真的解决您的具体问题,但也许是可以考虑可能导致一个问题的东西。

+0

+1 Upvote ...理由,以及我必须同意上述说法。当你处理检测时区时,这可能会变得棘手。第一次创建用户或帐户时,尝试从javascript/browser中检测它,然后发布到服务器端。然后向用户提供选项以选择时区,但显示您检测到的内容的默认值。否则,请确保仅在显示给用户/输出时使用时区。大多数计算都是使用UTC/No时区完成的。 – Mayhem 2015-01-31 05:19:11