[英]Mysql, PHP and UTC_TIMESTAMP()
我知道這里有關於這個主題的一百個問題,但是我已經閱讀了全部,但仍然沒有得到。
我使用UTC_TIMESTAMP()
最后一次擊中API的日期存儲在設置表中。 列類型是mysql timestamp
:
UPDATE settings SET last_pull = UTC_TIMESTAMP();
當我從mysql中選擇它時,我得到以下信息:
mysql> select last_pull from settings;
+---------------------+
| last_pull |
+---------------------+
| 2015-06-30 23:05:00 |
+---------------------+
1 row in set (0.00 sec)
似乎很清楚,因為我是太平洋時間,所以UTC時間比我早8小時。 因此,當我創建該記錄時是當地時間16:05:00。 (實際上是當地時間16:05 -我在那里!)
令我感到困惑的是,當我根據此處的每個答案將數據從數據庫中拉回時,我應該能夠使用默認的PHP date
或datetime
函數,並假設我已正確設置了時區,我應該獲得該時間戳的本地時間(例如date('Ymd H:i:s', $last_pull_value)
應該返回2015-06-30 16:05:00
date('Ymd H:i:s', $last_pull_value)
)。
這個假設不正確嗎? 我已經確認我的Linux和PHP時區正確,並且mysql也已正確設置。
但是當我這樣做
$last_pull = new DateTime();
$last_pull->setTimestamp($row['last_pull']);
var_dump($last_pull->format("c"));
它返回:
"2015-06-30 23:05:00"
因此,我明確設置了時區:
$last_pull = new DateTime();
$last_pull->setTimestamp($row['last_pull']);
$last_pull->setTimezone(new DateTimeZone('America/Los_Angeles'));
var_dump($last_pull->format("c"));
並且它返回完全相同的東西(如果默認的TZ開頭正確,則是有意義的)。
"2015-06-30 23:05:00"
我的問題是,如何獲取上次拉出API的本地時間? 為什么datetime
函數不返回16:05:00?
謝謝
如果您在初始化時為DateTime對象設置了時區,它將按預期工作。
$last_pull = new DateTime('2015-06-30 23:05:00', new DateTimeZone('UTC'));
var_dump($last_pull->format("c")); //string(25) "2015-06-30T23:05:00+00:00"
$last_pull->setTimezone(new DateTimeZone('America/Los_Angeles'));
var_dump($last_pull->format("c")); //string(25) "2015-06-30T16:05:00-07:00"
DateTime對象的文檔指出,用於新日期時間對象的默認時區是您當前的時區-http: //php.net/manual/en/datetime.construct.php
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.