Это своего рода глупый вопрос, но каково будет максимальное значение INT time()
и его будущая дата, например
1 января 2999 г.
Будет ли время () когда-либо доходить до этой ценности? Переход на большое значение time()
вернет это:
Чт 1 янв 1970 1:00
Нормальная дата int
1287320788 – выходы сегодняшней даты: вс 17 окт 2010 14:06
Но мне очень любопытно, что самое большое время и дата.
Последняя 32-битная Целочисленная метка времени будет достигнута 19 января 2038 года. Это называется проблемой 2038 года .
PHP хранит наивысшее целое число, которое он может представлять в константе PHP_INT_MAX
:
date('Ymd H:i:s', PHP_INT_MAX); // 2038-01-19 04:14:07
Если вы хотите работать с датами, выходящими за рамки этого, рассмотрите возможность использования API DateTime , например
$dt = new DateTime('1st January 2999'); $dt->add(DateInterval::createFromDateString('+1 day')); echo $dt->format('Ymd H:i:s'); // 2999-01-02 00:00:00 echo $dt->format('U'); // 32472226800
Помните, что проблема с Y2038 не применяется в 64-битных системах.
Самый короткий путь, который я знаю, – это получить дату завтрашнего дня:
date («Ynj», strtotime («+ 1 день»))
date("Ynj", PHP_INT_MAX)
на 64-битных системах дает потенциально опасное значение: 292277026596-12-4
Кажется, что 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.
На 64-битных платформах PHP_INT_MAX
не отражает максимальное значение INT для 32-разрядных платформ. Вот как это сделать:
$max32bitInt = PHP_INT_SIZE == 4 ? PHP_INT_MAX : PHP_INT_MAX>>32;
Если вы всегда используете 64-битную платформу, просто используйте:
PHP_INT_MAX>>32