PHP maketime在前一天给出22.00

Jil*_*aar 2 javascript php

我想在PHP和Javascript中为给定的一天创建两个相同的时间戳,但是有区别....

2012年7月1日:

PHP

$test = mktime(0,0,0,7,1,2012); gives 1341093600
Run Code Online (Sandbox Code Playgroud)

JavaScript的

var d = Date.UTC(2012,6,1); 
var timestamp = d/1000;   gives 1341100800
Run Code Online (Sandbox Code Playgroud)

为什么2小时差异?

Cor*_*bin 6

该调用Date.UTC将创建一个时间戳,该时间戳是2012-07-01 UTC的午夜.

另一方面,除了PHP配置使用的任何时区之外,mktime将执行相同的操作.

换句话说,您的服务器未设置为UTC.

最简单的解决方案可能是strtotime:

$timestamp = strtotime('2012-07-01 UTC');
Run Code Online (Sandbox Code Playgroud)

还有gmmktime或者你可以将PHP的时区设置为UTC.我会做.ini,但要做到这一点的代码,你可以使用date_default_timezone_set:

date_default_timezone_set('UTC');
Run Code Online (Sandbox Code Playgroud)

作为个人偏好的一个注释,我避免使用mktime.在strtotime和之间DateTime,我很少发现mktime导致代码更清晰,更易读的情况.mktime的beastly参数列表使得它所在的任何行看起来都非常可怕.