Доступ к датам в PHP после 2038 года - PullRequest
13 голосов
/ 16 марта 2011

Я понимаю, что из-за того, что PHP представляет даты в миллисекундах, вы не можете представлять даты после 2038 года. У меня есть проблема, когда я хочу вычислять даты в будущем.Через тысячи лет.

Очевидно, что я не могу использовать функцию даты php для представления этой даты из-за лимита, однако у меня есть кое-что на моей стороне ... Все, что я хочу сделать, это сохранить год, месяци день.Мне плевать на час, минуту, секунды и миллисекунды.

Правильно ли я считаю, что без включения этой дополнительной информации я смогу гораздо больше рассчитывать на будущее, потому что готов отказаться от большого количества информации.Это какая-нибудь библиотека, которая в настоящее время делает это?Если нет, то есть ли какие-либо советы о том, как решить эту проблему?

Ответы [ 5 ]

24 голосов
/ 16 марта 2011

Вы также можете использовать класс DateTime, который внутренне представляет компоненты времени независимо.Таким образом, он не подвержен ограничению 2038 (если вы не используете :: getTimestamp).

6 голосов
/ 16 марта 2011

Вы можете использовать 64-битную платформу.

Размер целого зависит от платформы, хотя максимальное значение около двух миллиардов является обычным значением (это 32биты подписаны).Максимальное значение для 64-битных платформ обычно составляет около 9E18.

Source .

Узнайте, что ваша платформа 64-битная с var_dump(PHP_INT_SIZE === 8).Если TRUE, ваша система является 64-битной.

2 голосов
/ 16 марта 2011

PHP ввел класс Datetime () в версии 5.2 для решения этой проблемы.Но вы все равно должны быть в 64-битной ОС.

1 голос
/ 30 июня 2014

Забудь о Windows! Даже если вы используете Apache 64-битный поверх Windows 64-битный!

$timestamp = strtotime('22-09-2508');
var_dump ($timestamp);
// returns bool false using WAMP 64-Bit over Windows 64 Bit

Если вам нужно вычислить метки времени, используйте 64-битную систему (не Windows):

$timestamp = strtotime('22-09-2508');
var_dump ($timestamp);
// returns int 17000496000 using a LAMP Server

Вы можете запустить сервер LAMP с помощью VMWare поверх Windows, и, скорее всего, ваш конечный хост-сервер также будет использовать эту 64-битную службу.

Другими словами:

if (intval("9223372036854775807")==9223372036854775807) {
  // 64-bit
} else {
  // 32-bit
}

Понял?

Примечание: time () и getTimestamp () работают нормально в 64-битной среде (linux) после 2038 года.

1 голос
/ 16 марта 2011

Вы правы в том, что PHP не позволяет вам обрабатывать даты> 2038, изначально.Однако есть библиотеки, такие как , эта , которые используют тот факт, что числа с плавающей запятой являются 64-битными, что позволяет вам при необходимости обойти эту проблему.(Все при условии, что вы используете 32-битную систему ... если вы используете 64-битную, все в порядке).

...