Подтвердить что ты не робот

Максимальное время() | PHP

Это своего рода глупый вопрос, но каково будет максимальное значение INT time() и его будущая дата, например.

1 января 2999 г.

Будет ли время() когда-либо доходить до этого значения? Переход к большому значению time() вернет это:

Чт 1 янв 1970 1:00 утра

Нормальная дата int

1287320788 - выходы сегодня дата: вс 17 окт 2010 2:06 вечера

Но мне любопытно только самая большая дата int и последняя дата.

4b9b3361

Ответ 1

Последняя 32-битная Целочисленная метка времени будет достигнута 19 января 2038 года. Это называется проблема 2038 года.

Ответ 2

PHP хранит наивысшее целое число, которое он может представлять в константе PHP_INT_MAX:

date('Y-m-d H:i:s', PHP_INT_MAX); // 2038-01-19 04:14:07

Если вы хотите работать с датами, выходящими за рамки этого, рассмотрите возможность использования DateTime API, например

$dt = new DateTime('1st January 2999');
$dt->add(DateInterval::createFromDateString('+1 day'));
echo $dt->format('Y-m-d H:i:s'); // 2999-01-02 00:00:00
echo $dt->format('U');           // 32472226800

Ответ 3

Помните, что проблема с Y2038 не применяется в 64-битных системах.

Ответ 4

Самый короткий путь, который я знаю, - это получить дату завтра:

date ( "Y-n-j", strtotime ( "+ 1 день" ))

date("Y-n-j", PHP_INT_MAX) на 64-битных системах дает потенциально опасное значение: 292277026596-12-4

Ответ 5

DateTime, похоже, также использует 32-битную на 64-битных серверах. Таким образом, вы попадаете в неприятности.

Я решил это так:

new DateTime("99999/12/31 00:00:00");

Поскольку дата переполняет максимальную длину для DateTime, дата использует максимальное возможное значение и возвращает объект DateTime, подобный этому (проверяется с помощью var_dump):

object(DateTime)#9 (3) { ["date"]=> string(19) "2031-09-12 00:00:00" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Berlin" } }

Я не уверен, отличается ли он от версий PHP. Я тестировал его с версией 5.4.

Ответ 6

На 64-битных платформах PHP_INT_MAX не отражает максимальное значение INT для 32-разрядных платформ. Вот как это получить:

$max32bitInt = PHP_INT_SIZE == 4 ? PHP_INT_MAX : PHP_INT_MAX>>32;

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

PHP_INT_MAX>>32