PHP:获取特定时间的DateTimeImmutable对象的最佳方法

PHP:获取特定时间的DateTimeImmutable对象的最佳方法,php,datetime,Php,Datetime,所以,我有一些时间价值观: $year = 2017; $month = 2; $day = 16; $hour = 7; $minute = 24; $second = 10; PHP是否有一种自然的方式从中获取DateTimeImmutable对象 是这个吗 $datetime = new DateTime; // Create DateTime for current time $datetime->setDate($year, $month, $day); $datetime-&

所以,我有一些时间价值观:

$year = 2017; $month = 2; $day = 16; $hour = 7; $minute = 24; $second = 10;
PHP是否有一种自然的方式从中获取DateTimeImmutable对象

是这个吗

$datetime = new DateTime; // Create DateTime for current time
$datetime->setDate($year, $month, $day);
$datetime->setTime($hour, $minute, $second);
$datetime = DateTimeImmutable::createFromMutable($datetime);
构造函数只接受一个字符串。描述了几种格式,但没有一种是ISO日期或类似的格式。我是否应该任意选择一个,例如“WDDX”(因为它不需要我填充值),并相应地格式化我的日期

$datetime = DateTimeImmutable($year.'-'.$month.'-'.$day.'T'.$hour.':'.$minute.':'.$second$);
所有这些方法都让人觉得相当麻烦。这通常是怎么做的

编辑:我刚刚找到了另一种感觉非常正确的方法(文档没有让它变得那么简单):

$datetime = DateTimeImmutable::createFromFormat(DateTimeImmutable::ATOM, $year.'-'.$month.'-'.$day.'T'.$hour.':'.$minute.':'.$second.'+00:00');

您可以尝试以下方法:

$time = (new DateTimeImmutable)
    ->setTime($hour, $minute, $second)
    ->setDate($year, $month, $day);
它是第一个示例代码的一个稍微“短”的变体,您可以使用

只是一个明显的提示:

请记住,DateTimeImmutable对象是不可变的:),因此每个方法
setSomething
都会返回DateTimeImmutable的新实例,并且不会更改初始实例

所以


哦,是的,我喜欢。提醒我在4分钟内接受答案一个类中有“不可变”一词的Setter方法让我不寒而栗。
$year = 2017; $month = 2; $day = 16; $hour = 7; $minute = 24; $second = 10;
    $datetime = (new DateTimeImmutable())
             ->setTimestamp(
                   mktime($hour, $minute,$second, $month, $day, $year)
              );
var_dump($datetime);
$timestamp = 12345;
$datetime = new DateTimeImmutable();
$datetime->setTimestamp($timestamp); // wrong
$datetime = $datetime->setTimestamp($timestamp); // right

// or better
$datetime = (new DateTimeImmutable())->setTimestamp($timestamp);