2013-09-25 27 views
3

當前正在辯論有關存儲日期的最佳方法,並希望獲得有經驗的意見 - 尋找「爲什麼」而不是「如何」。PHP/MySQL - 跨時區存儲日期選擇報告

場景:

我們正在開發一個系統,允許客戶(橫跨多個時區)創建的交易數據。註冊時,客戶將提名他們的時區。系統的很大一部分圍繞客戶端運行與交易數據相關的日期和時間報告。

我們已經閱讀了大量有關存儲交易日期字段和大多數商店作爲UTC的最佳方式的問題和意見,然後執行各種日期和時間相關的功能來計算各時區中的時間以便運行選擇報告。

我們的問題是 - 爲什麼要用UTC存儲所有的麻煩 - 以UTC存儲日期的優點是什麼。從我們的角度來看,我們有客戶提名的時區,所以如果我們將日期/時間存儲在正確的時區,那麼我們每次交易運行一次,之後所有報告都將運行,而無需進行任何日期轉換計算。

由於我們所閱讀的大多數問題和評論都提到了'我們如何'認爲必須對我們錯過的'爲什麼'有所瞭解。

因此,總之,在我們做出決定之前,我們錯過了一些東西 - 是否存在絕對'必須存儲日期爲UTC'的原因?

感謝您的閱讀 - 任何意見讚賞。

+0

客戶是否只報告自己的計算? – Jim

+0

每個客戶端只能訪問自己的事務數據,並且沒有邏輯原因或統計要求來運行多客戶端合併數據上的報告。 – FrankyC

+0

感謝您的所有意見 - 好辯論Glavic。根據我們的問題,如果沒有絕對的理由將日期存儲在UTC中,我們會選擇Labib的回答來評論他的意見,「在一個受控的環境中,它完全相同」。 – FrankyC

回答

0

不,在我看來,這裏沒有'必須'!這完全是一個設計問題,你選擇使用什麼來確定事物的工作方式,無論是哪種情況,這只是一個參考問題,建議使用UTC的人,是因爲它是衆所周知和驗證的參考,不管你的程序變得多大或你的客戶在哪裏,參考總是在那裏,但如果你使用另一個時區,事情將以同樣的方式工作,但你選擇的時區將是參考,這可能是在某些情況下會造成誤解,但仍然在受控環境中完全相同。 我希望我回答你的問題。

0

在我看來,最好將日期/時間作爲unix值存儲在數據庫中。然後,您可以使用存儲的時區或其他方式輕鬆控制顯示的數字,但如果您決定更改其顯示方式,則可以快速更改。

1

爲什麼要用UTC存儲所有的麻煩?

在UTC中存儲時間沒有問題。海事組織,如果他們都在同一個時區,維護日期時間字段更容易,而不是每個表的記錄在不同的時區,並與user表告訴你在什麼時區字段是(或甚至荒謬的辦法將存儲抵消像額外領域的+02:00)。

註冊時,客戶會提名他們的時區。

的會發生什麼時,你會添加相應的功能想:

  • 如果用戶有什麼變化沒有時區?
  • 如果您將升級系統,用戶可以爲每個請求提供時區,該怎麼辦?

是否有絕對的 '必須存儲日期爲UTC' 的原因嗎?

Ofc not;這完全取決於你的設計。你選擇什麼是你的工作;只是想想你會更容易,未來的升級等。

+0

Glavic - 感謝您的評論 - 只有一點 - >'如果用戶改變他們的時區會怎麼樣' - 我們認爲這是不存儲UTC時間的原因。採用UTC格式時區更改會改變所有歷史交易時間,從而破壞系統的完整性。 - – FrankyC

+0

我不同意,但這取決於您的項目邏輯。如果您將所有用戶記錄保存在他的時區中;並且用戶更改他的時區,那麼您需要更新他的所有記錄,以修復他的記錄以匹配他的新時區。在時區更改上,您必須更新記錄,這對於大型數據集來說並不好。如果您知道所有記錄都處於相同的偏移量,我不會看到這個問題。 –

+0

「關於時區更改,您必須更新記錄」 - 我們明顯生活在不同的世界 - 在我的「系統完整性」是王 - 變化的歷史記錄打開了一個業務處理問題的雷區,這可能會使公司的一切。無論如何,我認爲我們正在偏離我們的主要觀點。因此,讓我們說客戶不會改變時區,並擱置另一天的討論。謝謝。 – FrankyC