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;

запустить код на машине x86

Временная метка в 32-битной системе работает только до 2.147.483.647. Так что, если у вас есть большее значение, вы получите целочисленную максимальную длину. Максимум здесь - 2038 год.

Если вам нужны большие даты, вы должны использовать datetime.

Другие вопросы по тегам