Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

Ты мог Используйте 64 -битную платформу.

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

Источник.

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

PHP представил DateTime () Класс в версии 5.2, чтобы решить эту проблему. Но вы все еще должны быть в 64-битной ОС.

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

$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 года.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top