以下代码是否有更短的 Datetime 结构?

Is there a shorter Datetime construct for the following code?

目前我正在使用这样的片段:

if (is_numeric($date)) {
    $datetime = new DateTime('@'.$date);
} else {
    $datetime = new DateTime($date);
}

其中 $dateunixtimestamp 或某些日期字符串,例如 2016/03/03.

此构造的最佳故障安全等效项是什么?

也许是单线的?包装器 class ?

我问的是一些较短的结构,因为我们在系统的许多地方都使用了上述结构。所以我想用更具可读性和故障安全性的东西替换它。

您可以在 php 中使用 ternary operator4 行缩短为一行,如下所示:

$datetime = new DateTime((is_numeric($date) ? '@' : '') . $date);

如果您想要在您的项目中重复使用某些东西,请将其包装在您自己的 class 中,例如

class AcmeDateTime extends \DateTime
{
    public function __construct($time = "now", DateTimeZone $timezone = null)
    {
        $time = is_numeric($time) ? "@" . $time : $time;
        parent::__construct($time, $timezone);
    }
}