是否可以更改php的当前日期和时间(类似于set_time(strtotime('1999-09-09')),所以当我调用time()时它会返回1999-09-09的时间戳?我需要为整个app设置全局。
修改
我已经有一个旧的应用程序,我需要设置当前日期。 我不能接受任何自定义功能。想象一下,我应该检查所有代码并替换每次time()调用。即使我会这样做,它也无济于事,因为我还需要替换getdate()这样的函数。
答案 0 :(得分:16)
您还可以查看Timecop PHP module,在我的情况下完美运作。
安装后,您可以返回&只用一行代码就可以了。
答案 1 :(得分:10)
time()
函数实际上会询问系统时钟,因此您必须更新服务器系统时钟的时间。要记住的一些事项:
如果您想要为整个应用更改全局时间,我建议您使用静态变量$timeOffset
并创建自己的time()
函数,如下所示:
function myTime(){
global $timeOffset;
return time()+$timeOffset;
}
但是,如果您已考虑所有这些并仍想更改系统时间,则需要使用shell_exec()
在Windows中,代码如下所示:
shell_exec("date 09-09-99"); // Use "date mm-dd-yy" or "time hh:mm:ss", respectively
在UNIX中,根据date
手册页,代码如下所示:
shell_exec("date 0909hhmm1999"); // It says "date MMDDhhmiYYYY". I'm not sure how to set seconds, although I assume "mi" = "minutes"
答案 2 :(得分:2)
PHP没有自己的日期和时间。 time()返回服务器时间的当前时间戳。根据您的操作系统,您可能实际上不允许您(即运行脚本进程的用户)更改服务器日期和时间。
提出了一个不同的问题:你为什么要这样做?
最好是实现自己的time()函数:
class myTime
{
private static $offset = 0;
public static function getTime()
{
return time() + self::$offset;
}
public static function setTime($time)
{
self::$offset = $time - time();
}
}
然后,在您使用time()
的任何地方,请使用myTime::getTime();
。要设置时间,请使用myTime::setTime($time)
,其中$time
是您要使用的时间戳。
答案 3 :(得分:1)
不,不是。 PHP从系统时间中获取时间。您可以更改PHP所看到的时间的唯一方法是更改系统时间。
可能可以使用exec()
或类似的东西来做到这一点,但可能不合适。
更好的解决方案可能是创建您自己的时间函数,您可以使用偏移量指定。
例如:
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;
}
//usage:
set_mytime(strtotime("1999-09-09");
$faketime=mytime();
.... do something that takes a bit of time ....
$faketime2=mytime();
这就是我为你快速拼凑的东西。我没有对它进行测试,因此可能存在(可能存在)错误,但我希望它能为您提供足够的解决方案。
答案 4 :(得分:0)
您也可以尝试使用全局$_SERVER['REQUEST_TIME']
变量(自PHP 5.1.0起可用)并在运行时替换它。