php - 在 PHP 中使用 strtotime() 和在 MySQL 中使用 UNIX_TIMESTAMP() 时的不同时间戳

标签 php mysql date mysqli timestamp

我在数据库中存储了一个日期。日期是 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/

相关文章:

javascript - laravel,从输入到 Controller 函数的ajax调用500错误

php - MySQL - WHERE、AND & OR 语法

mysql - 在 Wordpress usermeta 表中批量插入 SQL

mysql - 同时在多个字段上进行 ORDER BY 而忽略 MySQL 中的特定值

Mysql 通过连接在多个表中进行选择

ios - 日期格式 - Swift

php - 如何使用 DATE_SUB 形成 SQL 查询来检查昨天的数据,或者如果是星期一,则检查星期五的数据?

php - 变量 mysql 查询(其中 $variable = everything)

php - 在 suitecrm 创建提醒工作流程的正确方法?

date - Golang 奇怪的格式日期