2012-07-27 149 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