2017-05-04 69 views

回答

1

從閱讀the source code看來,R::isoDateTime()只是一種方便的方法。它只是調用PHP time()函數,然後使用date函數將結果格式化爲字符串。

我沒有測試它,但在理論上 - date_default_timezone_set函數應該工作。例如:

date_default_timezone_set('America/Los_Angeles'); 
+0

是的。我使用了date_default_timezone_set – GRowing

0

正如Matt所指出的那樣,R::isoDateTime()只是一種便利功能。

在我檢查了紅豆的所有版本(3.x中,4.x版),它被定義爲:

@date('Y-m-d H:i:s', $time)` 

即:沒有任何時區信息時間戳。例如:2017-09-05 18:49:16。


下的MySQL:

您可能正在使用datetime無任何時區信息,並R::isoDateTime()會做得很好。


但使用的是Postgres時要注意:

Postgres將理解這種時候,沒有一個時區,隨着時代的Postgres的時區,這樣,即使你設置使用紅豆的時間(不是PHP的!) ,你可能會發現日期並不是你期望的那樣。

這應有助於:

  • 要檢查的Postgres的默認時區:SHOW timezone;
  • 要更改Postgres 角色(用戶)的默認時區:ALTER ROLE myuser SET timezone = 'Europe/Paris';
  • 我會建議將Postgres的默認時區設置爲你想要的 - 以保證安全。但是,無論何時使用時間,最好明確指出時區。這將避免讓您的時間誤解爲UTC,因爲它意味着它在特定的時區。因此,而不是無時區R::isoDateTime()您可能想要使用類似@date('c'),例如:2017-09-05T18:49:16 + 02:00。

最後記住Postgres的存儲一切,UTC,但能/會在各種時區的基礎上,其當前設置timezone設置顯示其timestamp without a time zone型(AKA timestamptz)。例如:如果設置了歐洲/巴黎,2017-09-05T18:49:16 + 02:00,但設置UTC時爲2017-09-05T16:49:16 + 00:00(兩者均指同一時間。)

(我愛RedBean,但沒有見過這覆蓋任何地方,希望這會幫助別人。)