Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP定义的常量和mktime()不一致_Php_Constants_Mktime - Fatal编程技术网

PHP定义的常量和mktime()不一致

PHP定义的常量和mktime()不一致,php,constants,mktime,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秒 然

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

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) {
该条件解析为false。如果我替换253402300799,它将解析为true

最后,我尝试:

$time_64 = mktime(23, 59, 59, 12, 31, 9999);
echo $time_64;
我得到了预期的答案:

253402318799

我被难住了。关于常数我有什么不明白的吗?

我相当肯定这是一个时区问题。如果您将这两个语句紧挨着执行,则会起作用:

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

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

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


标准化时区(理想情况下为UTC),或者改用
gmmktime()

服务器的时区设置是什么?您是否在代码中更改了这些内容?使用
gmmktime()
-
尝试相同的练习当在没有参数的情况下调用时,gmmktime()使用当前GMT时间,而mktime()使用当前本地时间
谢谢。时区将在代码的后面设置,因为它不在我设置常量的位置附近,所以我错过了它。18000秒等于5小时,所以我应该意识到这一点。