Даты после 01-01-2039, преобразованные в PHP, отображаются как 01-01-1970. - PullRequest
0 голосов
/ 11 апреля 2020

Я преобразовал дату 01-01-2039 с помощью функции php date ():

echo date("d-m-Y",strtotime('01-01-2039'));

Вывод отображается как: 01-01-1970

Любое решение для это?

Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

В дополнение к ответу @ Martin, я хочу отметить неоднозначность, вызванную некоторыми форматами даты при использовании strtotime.

В руководстве :

Даты в форматах m / d / y или dmy неоднозначны, если посмотреть на разделитель между различными компонентами: если разделитель является sla sh (/), тогда предполагается американский м / д / г ; тогда как, если разделителем является da sh (-) или точка (.), то предполагается европейский формат dmy . Однако если год указан в формате двух ди git, а разделитель - да sh (-), строка даты анализируется как ymd .

Кому Во избежание двусмысленности, лучше использовать даты ISO 8601 ( ГГГГ-ММ-ДД ) или DateTime::createFromFormat(), когда это возможно.

$dt = DateTime::createFromFormat('d-m-Y', '01-01-2039');
echo $dt->format('d-m-Y');
0 голосов
/ 11 апреля 2020

Этот ответ из комментария к разговору

Проблема вызвана проблемой Unix Timepomp Epoch .

Решение этой проблемы для нативного PHP заключается в использовании 64-битной версии PHP, которая правильно обрабатывает это конкретное целочисленное переполнение.

echo (PHP_INT_SIZE===8)?"64 bit ":"32 bit ";

Приведенный выше код показывает версию PHP.

Если присутствует 32-битный PHP, то его необходимо заменить на 64-битный PHP

...