year2038 — 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]

3

Решение

Попробуй это:

<?php

$dt = new DateTime('@4567743118');
$date = $dt->format('Y-m-d');

echo $date;

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

2

Другие решения

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

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

1

По вопросам рекламы [email protected]