0

是否可以更改 php 的系统日期(仅限)。我想要这个用于调试/测试目的。

//Test 1  (2010-01-01)
$datetime = new DateTime(); //(2010-01-01)

//Test 2  (2010-02-01)
$datetime = new DateTime(); //(2010-02-01)

我不能真正改变真正的系统时钟,因为其他开发人员正在同一个系统上工作(我可以但仍然如此)。我只是希望这是可能的,或者有人知道一个不错的技巧。

当我打印 phpinfo(); 我看到以下行:

Timezone Database   internal

也许它可以更改为“手动”之类的东西,并用 +120 广告时区

谢谢!

4

2 回答 2

3

这听起来像是一个封装问题——为什么不搜索所有提到的 date() 或 time() 并将它们替换为 $site->getDisplayedDate() 或其他适合您的代码的东西?

我感觉到你的痛苦,但我认为没有办法做到这一点。这样想……如果在一些不相关的代码中调用 time() 并且它给了你未来 3 周的某个日期,你会有什么感觉?

您只能更改时区(当然只能向前/向后几个小时;而不是一整天),但这不是正确的解决方案......

于 2013-10-24T13:07:24.413 回答
2

您可以创建自己的DateTime类来扩展默认值DateTime,从而更改行为:

<?php
    class CustomDateTimeVariables {
        public static $date = 'now';
    }

    class CustomDateTime extends DateTime {
        public function __construct($time = null, DateTimeZone $timezone = null) {
            if ($time === null) {   
                $time = CustomDateTimeVariables::$date;
            }
            if ($timezone !== null) {
                parent::__construct($time, $timezone);
            } else {
                parent::__construct($time);
            }
        }
    }

    CustomDateTimeVariables::$date = '2010-01-01';
    $datetime1 = new CustomDateTime();

    CustomDateTimeVariables::$date = '2010-01-02';
    $datetime2 = new CustomDateTime();

    var_dump($datetime1->Format('Y-m-d H:i:s')); //"2010-01-01 00:00:00"
    var_dump($datetime2->Format('Y-m-d H:i:s')); //"2010-01-02 00:00:00"
?>

演示

这样你也可以很容易地设置默认时间(检查CustomDateTimeVariables):

<?php
    class CustomDateTimeVariables {
        public static $date = 'now +120 hours';
    }

    class CustomDateTime extends DateTime {
        public function __construct($time = null, DateTimeZone $timezone = null) {
            if ($time === null) {   
                $time = CustomDateTimeVariables::$date;
            }
            if ($timezone !== null) {
                parent::__construct($time, $timezone);
            } else {
                parent::__construct($time);
            }
        }
    }

    $datetime = new CustomDateTime();

    var_dump($datetime->Format('Y-m-d H:i:s')); //"2013-10-29 13:37:39"
?>

..当它上线时,您只需将默认设置更改回now.

于 2013-10-24T13:34:42.547 回答