2013-02-05 65 views
3

我遇到了一個似乎是使用JavaScript日期選擇器來顯示並允許用戶從可用日程表日期的房間預訂日曆中選擇日期的常見問題。在javascript顯示時區偏移

瀏覽器的時區轉換意味着這些日期總是偏離某個邊界,因此通常當向用戶顯示一個保留日期時,日期將落在「明天」給觀衆,當服務器(本地時區到存儲在數據庫中的資產或房間)顯示爲「今天」。

我希望用戶的瀏覽器忽略javascript日期轉換,並只使用數據庫傳入的實際日期時間。

然而,這甚至發生在一個非常簡單的例子是這樣的:

var date = '2013-02-05'; 

var newdate = new Date(date); 

console.log(newdate); // Mon Feb 04 2013 16:00:00 GMT-0800 (PST) 

看來,date變量是由瀏覽器假設爲GMT,當我從它創建一個JavaScript日期對象,它將GMT時間轉換爲當地時間。

在這種情況下,最佳做法是在數據庫中使用GMT日期,並將網站的本地時間偏移量設置爲javascript中的變量,然後可用於偏移顯示給最終用戶的日期,並再次抵消從最終用戶接收的插入數據庫的日期?

這是令人困惑的,因爲存在很多潛在的缺陷 - PHP語言環境,mysql語言環境或瀏覽器的語言環境都可能影響到它,並搞砸最後的日期。任何建議,以確保一致的日期值讚賞!

+1

我不得不爲這個自己實現一個解決方案,這並不好玩,但是我發現以下減少的麻煩:隨時隨地分別存儲UTC/GMT一切。嘗試將時區附加到您通過任何不知道UTC的任何日期。除非用戶可以在某種用戶設置頁面或註冊表單中明確設置時區,否則可以給用戶下拉選擇時區,而不是嘗試猜測,如果嘗試猜測,並將時區下拉菜單設置爲猜測區域。不是一個真正的答案,但我希望它有幫助。 – dennmat

+0

有關於此的任何解決方案? –

回答

1

好問題,處理時區是一團糟。幸運的是,Javascript具有大部分方法的UTC變體。請參閱http://en.wikipedia.org/wiki/Coordinated_Universal_Time

我認爲最好的是使用世界時UTC日期(UI 除外)。確保服務器使用並存儲UTC日期,並在任何地方使用javascript UTC方法。這是第一個也是最重要的一步,所以你知道日期是一致的。

在UI中呈現日期的方式非常簡單,而且取決於目標受衆,應用程序性質等。我認爲這更多是討論的主題,並且在Stack Overflow中有一些無法回答的問題(還有其他論壇主觀琢磨)。

我會說不相信瀏覽器或任何類型的地理位置autoconvert時區;它應該是用戶可配置的,或者可以是組/項目/安裝特定設置。一些軟件主要用於一個時區內,如果用戶在某個「標準」時間使用它們進行通信,試圖自動轉換時區可能會讓用戶感到困惑和煩惱。用戶是否應該在不同的時區看到他或她旅行的時間?有時它是有道理的,有時候不是,但至少要確保用戶在讀取和輸入時間時都知道你遵循的是什麼邏輯。

我開發項目管理軟件時,應用程序和用戶(!)明確地處理這些事情是非常重要的。我的做法是始終強制UTC顯示和輸入。它在每個日期都清晰可見,即UTC。處理各種時區會變得很快,我決定最好不要這樣做。我在用戶界面的某些部分有一些助手,它們在用戶本地時區等信息中以細小的方式顯示相同的信息。有一個項目範圍的設置來「隱藏所有時區相關的東西,並強制時區x」,它可以用於已知永不跨越時區邊界的小型項目,有一個使用某個區域的協議,或者它只是一個給定的,最好不要打擾用戶這種複雜性。

編輯:我應該補充說,作爲一個例子,這可以得到多毛,有時一段時間只是一個時間。在某些情況下,在15:00的事件可能意味着它發生在15:00在不同的地方,在他們各自的當地時區。呃......