PHP: лучший способ получить объект DateTimeImmutable для определенного времени



Итак, у меня есть некоторые значения времени:



$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$);


Все эти способы очень обременительный. Как это обычно делается?



Edit: я просто нашел другой способ (документация не сделала это легко), который кажется совершенно правильным:



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

2 ответов:

Вы можете попробовать что-то вроде этого:

$time = (new DateTimeImmutable)
    ->setTime($hour, $minute, $second)
    ->setDate($year, $month, $day);

Это немного "укороченный" вариант вашего первого примера кода

Вы можете использовать функцией mktime и DateTimeImmutable::setTimestamp

$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);

Просто очевидное замечание:

Помните, что объект DateTimeImmutable является неизменяемым :), поэтому каждый метод setSomething возвращает новый экземпляр DateTimeImmutable и не изменяет исходный экземпляр.

Итак

$timestamp = 12345;
$datetime = new DateTimeImmutable();
$datetime->setTimestamp($timestamp); // wrong
$datetime = $datetime->setTimestamp($timestamp); // right

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

Comments

    Ничего не найдено.