2011-03-22 101 views
6

我們在我們的網站上使用jQuery日期選擇器來選擇預訂的日期和時間。該日曆目前設置爲PST,這會導致用戶嘗試從其他時區訪問時出現錯誤。我們是否應該將服務器設置爲UTC,並讓應用程序根據IP地址自動選擇用戶的時區。我很好奇,因爲自動選擇可能會失敗(即當用戶通過代理工作時)是否也需要包括手動選擇。任何建議將不勝感激。jQuery日期選擇器 - TimeZone問題

回答

2

我敢冒險猜測前端根本不需要對時區有任何理解。

當他們從日期選擇器中選擇一個時間時,只需按原樣返回(如果他們選擇了9PM,只需傳回9PM)。在服務器上,將該日期&時間轉換爲時間戳。

此時,您可以根據IP對用戶的時區進行調整,或者選擇實施該時區。您可以只添加或減去目標時間的小時數以匹配用戶的時區。

但是,這意味着您還需要重新解析輸出它們的時間,以確保它們顯示它們應該如何。因此,例如,如果您要存儲Unix時間戳,請確保根據用戶的位置打印格式化的日期。

您絕對應該允許用戶選擇自己的時區進行覆蓋,但默認情況下是這樣做的。

7

用戶已經選擇了他們的操作系統設置中的時區。 Use javascript to detect this timezone (not based on IP),並將它與日期選擇器值一起傳遞給服務器端應用程序。您可以在Javascript或服務器端將本地時間轉換爲UTC時間,無論您喜歡什麼。但保持服務器端應用程序的UTC,因爲這是一種很好的做法,並且在內部是某些語言使用的,例如,Java中的java.util.Date

1

如果只需要在網絡界面顯示次數:

  • 計算時間在客戶端上爲秒(Unix時間),使用Date.getTime()/ 1000;分別爲Date.setTime(utc_seconds * 1000);注意,JavaScript使用毫秒
  • 傳輸客戶端和服務器的秒數(Unix時間)
  • 店時間爲UTC時間戳(有可能你的後端支持轉換爲UTC時間戳)

之間的所有時間如果您需要在服務器上以人類可讀的時間完成其他內容(例如發送包含會議時間的電子郵件):

  • 捕獲客戶端中的時區(例如,使用jsTimezoneDetect),並保存在服務器
  • 上使用服務器端的計算所拍攝的時區的用戶

警告:

  • 無論什麼機制,基於IP的位置檢測不完美;我不會將它用於時區檢測
  • 大多數非Windows系統使用tz database;如果您的後端是Microsoft,則您可能需要convert到Windows標準時區
  • 而時區檢測增大時,事情可能會出錯,因爲某些轄區會特別更改時區;
  • 對於您的應用程序,我預測如果您支持定期會議,對時區規則更改的最大痛苦; OS通常包含在服務包中
  • 您可能會考慮用戶手動設置時區的機制(可能在自動檢測後)