[英]PHP strtotime and MySQL UNIX_TIMESTAMP return different integer
[英]different Timestamps when using strtotime() in PHP and UNIX_TIMESTAMP() in MySQL
我有一個存儲在數據庫中的日期。 日期是2017-03-01。 該字段是“日期”字段。
我用的時候
DATE_FORMAT(orderdate, '%d.%m.%Y') as mydate
在我的MySQL-Query中,顯示“01.03.2017”。
我用的時候
UNIX_TIMESTAMP(orderdate) as mydate
並輸出date('dmY', $mydate)
結果我得到28.02.2017。
這是“二月問題”嗎? 我怎樣才能讓date()做得對?
-----------------編輯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中的函數和NOW()的MySQL。
Col 1是MySQL-Query的UNIX_TIMESTAMP。
Col 2是使用PHP-Date-Function和Col 1生成的日期。
Col 3是strtotime()的Unix時間戳。
Col 4是使用PHP-Date-Function和Col 3生成的日期。
第5列是使用DATE_FORMAT格式化的日期(xdate,'%Y-%m-%d')。
第6列是直接來自數據庫的日期。
正如您所看到的,前八行是錯誤的,由date() - 函數(第二列)計算得到了MySQL-Query的(錯誤的?)UNIX_TIMESTAMP():
date('d.m.Y', $mydate)
如果我更換線路,我測試了會發生什么
mysqli_query($db, "SET time_zone = '+02:00'");
同
mysqli_query($db, "SET time_zone = '+01:00'");
date-Function返回正確的Date,但是在NOW中的NOW()提供了錯誤的時間。
當我從腳本中刪除帶有“設置”的部分時(參見編輯1),一切都是相同的,但后來我的時區錯誤。
有人對我有任何線索嗎?
好吧,我的設置似乎沒問題,似乎是,PHP中的strtotime()與Timezones一起使用,與MySQL中的UNIX_TIMESTAMP相對。 我決定替換選擇UNIX_TIMESTAMP()的SELECTS並將其轉換為帶有strtotime()的時間戳。 現在它起作用了。
擴展您的格式以包括小時和分鍾,1讓您10將您的LOCAL服務器日期(根據其時區)與UNIXTIME(GMT)以及您位於格林威治以東的時區進行比較。
我永遠不會理解需要重新計算自1970年以來的有效呈現日期。當然,之后這些秒被重新格式化為可讀的日期呈現。
`
<?php
$dtDate = new \DateTime('2017-03-01');
echo $dtDate->format('d.m.Y');
?>
`
但無論哪種情況,都應該了解php和數據庫服務器的時區設置
對於時區:DateTime,可以有第二個參數指定時區
至於開幕式中顯示的日期:日期31-3-2017是2017年節日開始之后的第一個日期(從3月26日星期日開始)也是每天不假設的原因有24 * 60 * 60秒
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.