Ние работим с широк кръг от дати в PHP

SHRA лична страница, блог frilensera, уеб разработчик в PHP. Тук споделям моите преживявания и мисли, прекарват експерименти върху хора, събират нематериален доказателство за собствената си глупост. Използването на примерен код от този сайт, Вие приемате цялата отговорност за последствията от използването им, включително и психическото си здраве и интересите на трети лица.

Блог / PHP / Ние работим с широк кръг от дати в PHP

Проблемът в 2038.

Работа с дати по-късно от 2038 (преди 1900).

Не бих започнете този разговор, ако тя не показва никакви решения.

На първо място, разбира се, едно от решенията, ще бъде разширяването на променливата до 64 бита, което ще обхване периода на 292 милиарда долара. Години. Така се запази съвместимостта с по-стари програми, въпреки че те ще трябва да бъдат прекомпилирани, която извърши актуализиране на бази данни и т.н.

И дори след 250 млрд. Години променливата ще се разшири до 1024 бита, в случай, че Вселената все още не се развива в цикли (няколко думи за Големия взрив) :).

Ние трябва да свикне да работи в по-голям диапазон от време. Докато човечеството живее на земята, а след това са напълно естествени годишни цикли (преброяване на земята се завърта около Слънцето). Трудно е да се каже, когато ние се откаже такова изчисление. Най-вероятно за дълго време след колонизирането на други светове, нашите предци, ще отнеме време в земни години. Във всеки случай, ако циклите една година е малко вероятно да продължи в далечното бъдеще, за периода 1 секунда няма никакви предпоставки за замяна и след това. Т.е. Временно съхраняване под формата на няколко секунди, тъй като това, което историческия момент, ще се проведе на.

Разширяване на бита, обаче, не решава друг проблем - датата на подаване до 1900. Аз ще използва това за отрицателни стойности, но засега не го правят. Може би по-късно :) предполагам.

Завръщайки се от теорията към практиката, т.е. за PHP, ние имаме две добри решения. Един от тях - е използването на клас DateTime. Второто решение намираме, като се има предвид това, което обикновено се използва във връзка PHP. Това е - на база данни, в която често имаме голям арсенал от работа с този тип данни като DATETIME. Ще разгледам MySQL, за спецификата на базата данни.

PHP DateTime клас.

Този клас ви позволява да работите с течение на времето в диапазона от "0000-00-00 00:00:00" до "9999-12-31 23:59:59". Кое е по-далеч отвъд епохата UNIX. Този клас обикновено работи дори и в по-голям диапазон. Опитайте се, например, че следния код:

Но инициализира датата на обект по-възрастен от 10000 години не успеете, защото ние приемаме, че споменатите по-горе диапазон работи.

Тъй като форматът е съвместим с функцията за дата формата на датата (), вие ще бъдете в състояние да получи всеки "обичайния" актуална информация.

DATETIME тип данни в MySQL.

Този тип път съхранение обхваща периода от време (както е документирано) от '01 / 01/1000 00:00:00 "на" 23:59:59 9999-12-31 ". 1000 година е по-малък от първия вариант :), но много по-широк UNIX епоха.

Изчисленията не засягат склада за данни, ние не се отнасят до масите. Заявки ще се извършват много бързо. Но тя все още е призив към "външни" източника на данни (друга програма, библиотека). Ние трябва да се опитаме да се намали броят на такива искания. сървъра на базата данни може да се намира на друг компютър, и препратка към него ще пътуват по мрежата.

Ето един пример на такова искане, където изпълнява поредица от изчисления, ние трябва на датата и часа.