Я использую эту функцию во всем коде. Передайте ей строку, похожую на дату, или объект DateTime (Immutable); он будет выплевывать PHP DateTime или DateTimeImmutable объект, или false, если input является строкой, похожей на «0000-00-00». Со вторым параметром он также может заставить результат быть неизменным или нет:
function ensureDateTime ( $input, $immutable = NULL ) {
if ( ! $input instanceof \DateTimeInterface ) {
if ( in_array( $input, ['0000-00-00', '0000-00-00 00:00:00'], true ) ) {
$input = false;
} elseif ( $immutable ) {
$input = new \DateTimeImmutable( $input );
} else {
$input = new \DateTime( $input );
}
} elseif ( true === $immutable && $input instanceof \DateTime ) {
$input = new \DateTimeImmutable( $input->format(TIMESTAMPFORMAT), $input->getTimezone() );
} elseif ( false === $immutable && $input instanceof \DateTimeImmutable ) {
$input = new \DateTime( $input->format(TIMESTAMPFORMAT), $input->getTimezone() );
}
return $input;
}
В основном функция "Я не уверен, с чего я начал, но я знаю, чего хочу", функция.
(Примечание: здесь немного синтаксиса PHP 7, но его легко адаптировать к PHP 5)