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

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了在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()的时间戳.现在它起作用了.

脚本宝典总结

以上是脚本宝典为你收集整理的在PHP中使用strtotime()和在MySQL中使用UNIX_TIMESTAMP()时使用不同的时间戳全部内容,希望文章能够帮你解决在PHP中使用strtotime()和在MySQL中使用UNIX_TIMESTAMP()时使用不同的时间戳所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。