我有一個存儲在數據庫中的日期。日期爲2017-03-01。該字段是「日期」字段。在PHP中使用strtotime()和在MySQL中使用UNIX_TIMESTAMP()時的不同時間戳
當我在 「2017年3月1日」 顯示我的MySQL查詢,使用
DATE_FORMAT(orderdate, '%d.%m.%Y') as mydate
。
當我使用
UNIX_TIMESTAMP(orderdate) as mydate
和輸出它像date('d.m.Y', $mydate)
我收到2017年2月28日作爲一個結果。
這是一個「二月 - 問題」?我怎樣才能讓日期()做對了?
-----------------編輯1 -----------------
我把這個在我的代碼已經在之前。
# set timezone
date_default_timezone_set('Europe/Vienna');
# daylight-saving time
if(date('I') < 1){
mysqli_query($db, "SET time_zone = '+01:00'");
}else{
mysqli_query($db, "SET time_zone = '+02:00'");
}
-----------------編輯2 -----------------
好吧,我生成的MySQL表與此內容(字段類型:「日期」):
xdate
2017-01-01
2017-01-15
2017-01-31
2017-02-01
2017-02-15
2017-02-28
2017-03-01
2017-03-15
2017-03-31
2017-04-01
2017-04-15
2017-04-30
2017-05-01
2017-05-15
2017-05-31
2017-06-01
2017-06-15
生成的輸出從我的腳本:
Current Time
2017-06-16 02:31:08 PHP-Time
2017-06-16 02:31:08 MySQL-Time
Col 1 Col 2 Col 3 Col 4 Col 5 Col 6
1483221600 2016-12-31 1483225200 2017-01-01 2017-01-01 2017-01-01
1484431200 2017-01-14 1484434800 2017-01-15 2017-01-15 2017-01-15
1485813600 2017-01-30 1485817200 2017-01-31 2017-01-31 2017-01-31
1485900000 2017-01-31 1485903600 2017-02-01 2017-02-01 2017-02-01
1487109600 2017-02-14 1487113200 2017-02-15 2017-02-15 2017-02-15
1488232800 2017-02-27 1488236400 2017-02-28 2017-02-28 2017-02-28
1488319200 2017-02-28 1488322800 2017-03-01 2017-03-01 2017-03-01
1489528800 2017-03-14 1489532400 2017-03-15 2017-03-15 2017-03-15
1490911200 2017-03-31 1490911200 2017-03-31 2017-03-31 2017-03-31
1490997600 2017-04-01 1490997600 2017-04-01 2017-04-01 2017-04-01
1492207200 2017-04-15 1492207200 2017-04-15 2017-04-15 2017-04-15
1493503200 2017-04-30 1493503200 2017-04-30 2017-04-30 2017-04-30
1493589600 2017-05-01 1493589600 2017-05-01 2017-05-01 2017-05-01
1494799200 2017-05-15 1494799200 2017-05-15 2017-05-15 2017-05-15
1496181600 2017-05-31 1496181600 2017-05-31 2017-05-31 2017-05-31
1496268000 2017-06-01 1496268000 2017-06-01 2017-06-01 2017-06-01
1497477600 2017-06-15 1497477600 2017-06-15 2017-06-15 2017-06-15
當前時間是在我的電腦上顯示的同一時間。所以這是正確的時間和時間設置似乎沒問題。 「當前時間」由date()生成 - 函數在PHP中與MySQL的NOW()。
Col 1是MySQL-Query的UNIX_TIMESTAMP。
西2是與PHP-日期 - 功能生成的日期和Col 1.
西3是的strtotime的Unix時間戳()。
山口4是與PHP-日期 - 功能和Col 3.
山口5產生的日期與DATE_FORMAT格式化日期(xdate, '%Y-%間 - %d')。
Col 6是直接從數據庫中得到的日期。
正如你所看到的,前八行是錯誤的日期()計算 - 被供給與功能(第2列)UNIX_TIMESTAMP()了MySQL查詢的(錯誤):
date('d.m.Y', $mydate)
我測試會發生什麼,如果我更換線
mysqli_query($db, "SET time_zone = '+02:00'");
與
mysqli_query($db, "SET time_zone = '+01:00'");
的日期功能GIV回到正確的日期,但MySQL中的NOW()會傳遞錯誤的時間。
當我使用腳本中的設置刪除零件(請參閱編輯1)時,一切都是平等的,但我有錯誤的時區。
有沒有人對我有幫助?
這是PHP和MySQL之間的時區問題/區別。 – AbraCadaver
hmmm我已經把時區設置放在了我的設置文件中..參見我的edit1 – Bernhard
@Bernhard,比較兩個UNIX時間戳,以便更好地理解它出錯的地方。如果他們是一樣的,那麼問題出現在時區中。如果他們不同,服務器時間是不同的。 –