2014-10-24 2 views
3

Я наткнулся на этот вопрос:дата PHP() не для высоких отметок времени на 32-битных

<?php 

echo date('r', 4567743118); 

Желаемая & правильный результат (на локальном хосте):

Sun, 30 сентября 2114 10: 31:58 +0100

Неправильный результат (на пульте дистанционного управления):

чт, 24 августа 1978 04:03:42 +0100

Плохой результат получается при выполнении сценария на 32-битной платформе. Я думаю, что это знаменитая проблема Y2038, но как ее исправить?

Если я повторяю отметку времени (при хранении в переменной), она показывает штраф, но date() уничтожает ее (полагается на int32, предположим).

<?php 
$a = 4567743118; 
echo $a; 

[если применимо, это PHP 5.4.4 из DEBiAN РЕПО]

+1

Похожие темы: http://stackoverflow.com/questions/2012589/php-mysql-year-2038-bug-what-is-it -how-to-solve-it –

+0

Все о y2038 «похоже», но это не актуально. Мне нужно отформатировать эти временные метки. – MightyPork

+0

Каков результат 'date ('r', '4567743118');'? –

ответ

2

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

<?php 

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

echo $date; 

run code on x86 machine

+1

Отлично, это работает. Я создал для этого функцию-оболочку 'fdate()'. – MightyPork

1

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^