簡體   English   中英

MySQL,PHP和UTC_TIMESTAMP()

[英]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 datedatetime函數,並假設我已正確設置了時區,我應該獲得該時間戳的本地時間(例如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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM