Intereting Posts
PHP: Правильное регулярное выражение для того, чтобы каждая буква слева от первого нижнего регистра двоеточия Регулярное выражение для адреса улицы Возможно ли запустить XMPP на основе PHP и Javascript многопользовательской сетевой игры в FaceBook? .htaccess запретить файлы в подпапках Процесс виртуализации PHP – получение родительского вывода в родительском XMLhttpRequest> PHP> XMLhttpRequest Функция MySQL для определения близости / диапазона Zip-кода Выбранная запись в раскрывающемся списке Элемент формы HTML-формы Утилита HTTP-заголовка «Content-Type: application / force-download» для мобильных устройств? Crawler script php Как реализовать «запомнить меня» в laravel 5.1? Получите uniq случайные строки из файла и напишите их в другой файл, используя php Как проверить, является ли URL-адрес внешним URL-адресом или внутренним URL-адресом с помощью PHP? Javascript / PHP Family Tree Builder с несколькими родителями Удалить пустые теги в Imperavi Redactor

Доступ к датам в PHP за пределами 2038

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

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

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

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

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

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

    Источник .

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

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

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

    Забудьте о Windows! Даже если вы используете 64-разрядный Apache 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 Server с помощью VMWare через Windows, и, скорее всего, ваш конечный хост-сервер будет использовать этот 64-разрядный сервис.

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

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

    Понял ?

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