Intereting Posts

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

Это своего рода глупый вопрос, но каково будет максимальное значение 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