PHP date() не работает для высоких временных меток на 32-битной
Я наткнулся на эту проблему:
<?php
echo date('r', 4567743118);
Желаемый и правильный результат (на локальном хосте):
Воскресенье, 30 сентября 2114 10:31:58 +0100
Неверный результат (на пульте):
Четверг, 24 августа 1978 г. 04:03:42 +0100
Плохой результат получается при запуске скрипта на 32-битной платформе. Я думаю, что это знаменитая проблема Y2038, но как мне ее исправить?
Если я повторяю метку времени (при сохранении в переменной), она показывает нормально, но date()
уничтожает его (приведение к int32, я полагаю).
<?php
$a = 4567743118;
echo $a;
4567743118
[если уместно, это PHP 5.4.4 из репозитория Debian]
2 ответа
Попробуй это:
<?php
$dt = new DateTime('@4567743118');
$date = $dt->format('Y-m-d');
echo $date;
Временная метка в 32-битной системе работает только до 2.147.483.647. Так что, если у вас есть большее значение, вы получите целочисленную максимальную длину. Максимум здесь - 2038 год.
Если вам нужны большие даты, вы должны использовать datetime.