Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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脚本会让人认为系统时钟/日期与实际情况不同吗?_Php_Date_Datetime_Time_Clock - Fatal编程技术网

有没有什么办法可以;把戏;一个单独的PHP脚本会让人认为系统时钟/日期与实际情况不同吗?

有没有什么办法可以;把戏;一个单独的PHP脚本会让人认为系统时钟/日期与实际情况不同吗?,php,date,datetime,time,clock,Php,Date,Datetime,Time,Clock,我需要调试各种与时间相关的问题。每六个月只有一个bug发生一个小时。要等半年才有一个小时的时间来修复这个bug是很乏味的。由于这个原因,以及类似的测试情况,我想为单个PHP脚本“伪造系统时钟/日期” 它不能改变实际的系统时钟/日期!实际上,改变这一点对于我保存的所有类型的日志来说都是灾难性的,无论它们多么短暂 我希望能够做到以下几点: set_fake_time_for_this_script('1995-05-04 04:24:15'); sleep(3); var_dump(time());

我需要调试各种与时间相关的问题。每六个月只有一个bug发生一个小时。要等半年才有一个小时的时间来修复这个bug是很乏味的。由于这个原因,以及类似的测试情况,我想为单个PHP脚本“伪造系统时钟/日期”

它不能改变实际的系统时钟/日期!实际上,改变这一点对于我保存的所有类型的日志来说都是灾难性的,无论它们多么短暂

我希望能够做到以下几点:

set_fake_time_for_this_script('1995-05-04 04:24:15');
sleep(3);
var_dump(time()); // Will not return the timestamp for my computer's system clock, but instead "1995-05-04 04:24:18".
// Any other time-related functions will also use that fake time/date as the "present time".

这可能吗?如果是,怎么做?请告诉我这是…

这是不可能的PHP实现时间功能的方式

PHP从它所在的服务器读取时间(在您的情况下,可以是您的pc),因此您不能像那样更改时间

然而,有一种聪明的方法可以满足你的需要。由于时间的核心只是一个时间戳,这是一个数字,所以请找出当前时间和要在函数中设置的时间之间的时间戳差(正或负)。你会得到一个补偿

然后对时间执行所有需要执行的计算,并将偏移量添加到该计算中。这样,您将获得所有时间功能,而无需再次实现整个时间功能


function mytime() {
    return time()+set_mytime();
}

function set_mytime($new_time=null) {
    static $offset;
    if(!$new_time) {return $offset;}
    //$new_time should be a unix timestamp as generated by time(), mktime() or strtotime(), etc
    $real_time=time();
    $offset=$real_time-$new_time;
}

此外,如果您对更改时间非常感兴趣,可以使用
exec
函数并调用系统命令来执行此操作。但是请注意,随机更改整个系统的时间会产生意外的结果。

但我很少使用time()。。。因此,我必须弄清楚如何(如果可能的话)在发送时间的任何地方发送“自定义时间”。每个与时间相关的函数之间都会有变化,如果它有一个函数的话……你在这一次执行任何计算吗?