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

voo*_*ooD 20 php datetime

是否有可能改变php的当前日期和时间(类似于set_time(strtotime('1999-09-09')),所以当我调用time()时它会返回1999-09-09的时间戳?我需要设置它全球适用于整个应用.

编辑

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

zmf*_*zmf 16

您还可以检查Timecop PHP模块,在我的情况下完美地工作.

安装后,您只需一行代码就可以及时来回旅行.


ste*_*esu 10

这些time()函数实际上会询问系统时钟,因此您必须更新服务器系统时钟的时间.要记住以下几点:

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

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

function myTime(){
    global $timeOffset;
    return time()+$timeOffset;
}
Run Code Online (Sandbox Code Playgroud)

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

在Windows中,代码如下所示:

shell_exec("date 09-09-99"); // Use "date mm-dd-yy" or "time hh:mm:ss", respectively
Run Code Online (Sandbox Code Playgroud)

在UNIX中,根据date手册页,代码如下所示:

shell_exec("date 0909hhmm1999"); // It says "date MMDDhhmiYYYY". I'm not sure how to set seconds, although I assume "mi" = "minutes"
Run Code Online (Sandbox Code Playgroud)

  • 无论如何,你都有可能搞砸系统时钟.示例:您在11:59:55运行脚本,将时钟设置为两小时,完成,将其设置为向前两小时,现在称为12:00:10.不幸的是,你有一个进程计划在12:00:00启动 - 它会启动吗?答案是"没人知道" - 根据时钟,12:00:00从未发生过.(无论如何,你需要非常高的权限来捣乱时钟,如果你以root身份运行服务器,那你已经遇到了二十种麻烦) (6认同)

The*_*ter 5

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,在您使用的任何地方time(),使用myTime::getTime();. 要设置时间,请使用myTime::setTime($time)$time要使用的时间戳。