是否可以更改php的系统日期(仅限)

时间:2013-10-24 13:04:42

标签: php

是否可以更改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

的时区

谢谢!

2 个答案:

答案 0 :(得分:3)

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

我感到痛苦,但我认为没有办法做到这一点。以这种方式思考......如果在一些不相关的代码中,你打电话给时间()并且它在未来3周给你一些日期,你会有什么感觉?

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

答案 1 :(得分: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"
?>

DEMO

这样您也可以非常轻松地设置默认时间(查看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