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

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

19 голосов
/ 17 октября 2010

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

1 января 2999

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

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

Обычная дата int

1287320788 - выводит сегодняшнюю дату: вс 17 октября 2010 г. 2:06 PM

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

Ответы [ 6 ]

38 голосов
/ 17 октября 2010

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

30 голосов
/ 17 октября 2010

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
4 голосов
/ 17 октября 2010

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

1 голос
/ 20 ноября 2014

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

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

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

0 голосов
/ 20 марта 2017

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

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

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

PHP_INT_MAX>>32
0 голосов
/ 14 августа 2014

Похоже, что 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...