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

我有一个存储在数据库中的日期.日期是2017-03-01.该字段是“日期”字段.

我用的时候

DATE_FORMAT(orderdate,'%d.%m.%Y') as mydate

在我的MysqL-Query中,显示“01.03.2017”.

我用的时候

UNIX_TIMESTAMP(orderdate) as mydate

输出日期(‘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

当前时间与计算机上显示的时间相同.所以这是正确的时间,时间设置似乎没问题. “当前时间”由date()生成PHP中的函数和NOW()的MysqL.

Col 1是MysqL-Query的UNIX_TIMESTAMP.

第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()的时间戳.现在它起作用了.

相关文章

Hessian开源的远程通讯,采用二进制 RPC的协议,基于 HTTP 传输。可以实现PHP调用Java,Python,C#等多语...
初识Mongodb的一些总结,在Mac Os X下真实搭建mongodb环境,以及分享个Mongodb管理工具,学习期间一些总结...
边看边操作,这样才能记得牢,实践是检验真理的唯一标准.光看不练假把式,光练不看傻把式,边看边练真把式....
在php中,结果输出一共有两种方式:echo和print,下面将对两种方式做一个比较。 echo与print的区别: (...
在安装好wampServer后,一直没有使用phpMyAdmin,今天用了一下,phpMyAdmin显示错误:The mbstring exte...
变量是用于存储数据的容器,与代数相似,可以给变量赋予某个确定的值(例如:$x=3)或者是赋予其它的变...