我在数据库中存储了一个日期。日期是 2017-03-01。该字段是“日期”字段。
当我使用
DATE_FORMAT(orderdate, '%d.%m.%Y') as mydate
在我的 MySQL 查询中,显示“01.03.2017”。
当我使用
UNIX_TIMESTAMP(orderdate) as mydate
并输出为 date('d.m.Y', $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
当前时间与我电脑上显示的时间相同。所以这是正确的时间,时间设置似乎没问题。 “当前时间”由 PHP 中的 date() 函数和 MySQLs NOW() 生成。
列 1 是 MySQL 查询的 UNIX_TIMESTAMP。
第 2 列是使用 PHP-Date-Function 和第 1 列生成的日期。
第 3 列是 strtotime() 的 Unix 时间戳。
第 4 列是使用 PHP-Date-Function 和第 3 列生成的日期。
第 5 列是使用 DATE_FORMAT(xdate, '%Y-%m-%d') 格式化的日期。
第 6 列是直接来自数据库的日期。
如您所见,前八行由 date() 函数(第二列)计算错误,该函数由 MySQL 查询的(错误?)UNIX_TIMESTAMP() 提供:
date('d.m.Y', $mydate)
我测试了如果我替换这条线会发生什么
mysqli_query($db, "SET time_zone = '+02:00'");
与
mysqli_query($db, "SET time_zone = '+01:00'");
日期函数返回正确的日期,但 MySQL 中的 NOW() 返回错误的时间。
当我从脚本中删除带有设置的部分时(参见编辑 1),一切都一样,但我的时区不对。
有人给我线索吗?
最佳答案
好的,我的设置似乎没问题,PHP 中的 strtotime() 与时区一起工作,而不是 MySQL 中的 UNIX_TIMESTAMP。我决定用 strtotime() 替换选择 UNIX_TIMESTAMP() 的 SELECTS 并将其转换为时间戳。现在它可以正常工作了。
关于php - 在 PHP 中使用 strtotime() 和在 MySQL 中使用 UNIX_TIMESTAMP() 时的不同时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44528159/