是否可以更改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
的时区谢谢!
答案 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"
?>
这样您也可以非常轻松地设置默认时间(查看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
。