PHP定义的常量和mktime()不同意

时间:2014-08-19 16:03:41

标签: php constants mktime

我正在尝试为给定的托管环境建立最大时间戳设置,并使用该值设置常量。我写了以下内容:

define('SC_TIME_END_OF_64', mktime(23, 59, 59, 12, 31, 9999));

如果我在已知具有64位整数和64位时间的系统上显示这两个值:

echo SC_TIME_END_OF_64 . ' ' . mktime(23, 59, 59, 12, 31, 9999);

我明白了:

253402300799 253402318799

我的常数是18000秒太小。

然后我尝试了:

if (mktime(23, 59, 59, 12, 31, 9999) == 253402318799) {

该条件解决为假。如果我替换253402300799,它将解析为true。

最后,我试过了:

$time_64 = mktime(23, 59, 59, 12, 31, 9999);
echo $time_64;

我得到了预期的答案:

253402318799

我很难过。我不了解常数?

1 个答案:

答案 0 :(得分:1)

我相当确定这是一个时区问题。如果你把两个陈述紧挨着,它就可以了:

define('SC_TIME_END_OF_64', mktime(23, 59, 59, 12, 31, 9999));
echo SC_TIME_END_OF_64 . ' ' . mktime(23, 59, 59, 12, 31, 9999);
//253402329599 253402329599

http://sandbox.onlinephpfunctions.com/code/73e441ef17890152380b6c875157596e0287a1b6

但如果您在两者之间的某个时间点更改时区,则会得到不同的结果:

define('SC_TIME_END_OF_64', mktime(23, 59, 59, 12, 31, 9999));
date_default_timezone_set('Europe/Amsterdam');
echo SC_TIME_END_OF_64 . ' ' . mktime(23, 59, 59, 12, 31, 9999);
//253402329599 253402297199

http://sandbox.onlinephpfunctions.com/code/795bede12ac82b69b360bf8cae9bcd9eebc2ebf4

标准化时区(理想情况下为UTC),或使用gmmktime()代替。