Я попытался отформатировать дату, используя формат «c» или «r», и в итоге получил странные результаты.
Я пробовал интерпретатор PHP со своего персонального компьютера или использовал образ php:latest
Docker.
Попутно я перепробовал множество методов, и даже результаты этих меня удивили.
var_dump(DateTime::createFromFormat('c', (new DateTime())->format('c'))); // false
// or
var_dump(DateTime::createFromFormat('r', (new DateTime())->format('r'))); // false
(new DateTime())->format('c')
возвращает строку в ожидаемом формате, но я думал, что создание из нее объекта DateTime
вернет допустимый объект, а не false
.
Что это за поведение?
Спасибо за вашу помощь :)
Я пытаюсь проверить пользовательский ввод в своем проекте, а не просто создать объект из пустоты. Вот почему я использую DateTime::createFromFormat()
, чтобы проверить, соответствует ли ввод пользователя формату даты.
Эти символы формата неизвестны в соответствии с документация, где также указано (выделено мной):
$format
The format that the passed in string should be in. See the formatting options below. In most cases, the same letters as for thedate()
can be used.
Вы можете вызвать DateTime::getLastErrors()
, чтобы увидеть больше (хотя и немного запутанных) деталей:
Array
(
[warning_count] => 0
[warnings] => Array
(
)
[error_count] => 2
[errors] => Array
(
[0] => The format separator does not match
[1] => Trailing data
)
)
Спасибо ! Я смотрел не ту документацию >_< Я читал документацию date()
(php.net/manual/fr/function.date.php) :/ Еще раз спасибо :D
$t = new DateTime(); echo $t->format('c'); // 012345
этого достаточно, я думаю вы все усложняете