我在用什么模式来完成这个
时遇到了麻烦class DateTimeReference {
function __construct($time) {
$this = new DateTime($time, new DateTimeZone("UTC"));
}
}
$date = new DateTime("now"); // in server time
$dateref = new DateTimeReference("now"); // in UTC
基本上我想创建DateTime
对象的“扩展名”,但设置时区。当然,这是一个错误,因为您无法重新分配$this
。我不想使用工厂对象 - 任何人都可以向我推荐我如何处理这个问题(或者使用什么模式,例如?)。可能是装饰者模式?
答案 0 :(得分:5)
我不知道这是否符合你想要使用的模式,但它应该有用。
class DateTimeReference extends DateTime {
function __construct(string $time = "now" , DateTimeZone $timezone = NULL ) {
parent::__construct($time, new DateTimeZone("UTC"));
}
}
或者如果您希望用户能够覆盖时区,但如果未设置则默认为UTC:
class DateTimeReference extends DateTime {
function __construct(string $time = "now" , DateTimeZone $timezone = NULL ) {
parent::__construct($time, is_null($timezone) ? new DateTimeZone("UTC") : $timezone );
}
}
答案 1 :(得分:3)
你能做到:
date_default_timezone_set('UTC');
取决于你的应用程序做了什么,但如果你能做到这一点,这是最简单的: - )
答案 2 :(得分:2)
我没有看到这样做的问题..
class DateTimeReference extends DateTime {
function __construct($time, $timezone) {
parent::__construct($time);
$this->setTimeZone(new DateTimeZone($timezone));
}
}
$dateref = new DateTimeReference("now", "America/New_York");
您还可以通过以下方式选择时区:
class DateTimeReference extends DateTime {
function __construct($time, $timezone = "America/New_York") {
parent::__construct($time);
$this->setTimeZone(new DateTimeZone($timezone));
}
}
$dateref = new DateTimeReference("now");
此外,您只需将新的DateTimeZone对象传递给DateTime的构造函数:
$dateref = new DateTime("now", new DateTimeZone("America/New_York"));