在php中更改今天的日期和时间

时间:2010-10-13 12:56:02

标签: php datetime

是否可以更改php的当前日期和时间(类似于set_time(strtotime('1999-09-09')),所以当我调用time()时它会返回1999-09-09的时间戳?我需要为整个app设置全局。

修改

我已经有一个旧的应用程序,我需要设置当前日期。 我不能接受任何自定义功能。想象一下,我应该检查所有代码并替换每次time()调用。即使我会这样做,它也无济于事,因为我还需要替换getdate()这样的函数。

5 个答案:

答案 0 :(得分:16)

您还可以查看Timecop PHP module,在我的情况下完美运作。

安装后,您可以返回&只用一行代码就可以了。

答案 1 :(得分:10)

time()函数实际上会询问系统时钟,因此您必须更新服务器系统时钟的时间。要记住的一些事项:

  • 在Unix服务器上执行的操作与Windows服务器不同。如果您希望代码兼容两者,则必须小心
  • 有时(特别是在共享托管情况下)您不能更改系统时间
  • 脚本执行后,系统时间的更改将保留,除非您稍后再更改。因此,你冒着搞错系统时钟的风险。

如果您想要为整个应用更改全局时间,我建议您使用静态变量$timeOffset并创建自己的time()函数,如下所示:

function myTime(){
    global $timeOffset;
    return time()+$timeOffset;
}

但是,如果您已考虑所有这些并仍想更改系统时间,则需要使用shell_exec()

向shell发送命令

在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起可用)并在运行时替换它。