Конвертирайте дата в unix онлайн. Unix Time и Unix Timestamp (MySQL, PHP, JavaScript)

Само за читатели на Lifeexample е възможно да отворят онлайн магазин на Moguta.CMS с 15% отстъпка

Unix Time и Unix Timestamp (MySQL, PHP, JavaScript)

Здравейте, скъпи читатели на блога, в тази статия искам да ви разкажа какво е Unix времеИ Unix Timestamp. Често програмистите комбинират тези концепции в едно, но това не е съвсем вярно. В допълнение, статията съдържа много полезни бележки за работата с Unix Timestamps в PHP, MySQL и JavaScript.

Защо времето в Unix започва на 1 януари 1970 г

Въпросът е, че времето на Unix започва да брои епохата на Unix, с пускането на първата UNIX система. Първата система от този вид е създадена през 1969 г., така че разработчиците са взели датата от 1 януари 1970 г. в полунощ UTC ( UTC).

Нека разберем за какво служат времето на Unix и Unix Timestamp и да им дадем ясни концепции.

Unix Timestampе клеймо за време, което е поредица от знаци, представляващи броя на секундите, изминали от 1 януари 1970 г.

Ще се опитам да дам пример, за да изясня разликата между тези две понятия.

По време на писането на тази публикация, Unix времебеше равен 1346765877 .

В момента на четене от вас тази информация, запис на времето ( 1346765877 ) , вече е етикет − Unix Timestamp! Преобразувайки това клеймо за време в четяща от човека форма, получаваме датата 04-09-2012 и часа 17:37:57 .

Честно казано, според мен няма особен смисъл в разделянето на двете понятия, но все пак е полезно да имаме представа какво представлява Unix време, а също така е полезно да се разбере, че броят на максимално възможните секунди, изминали от 1970 г., има ограничение!

Краят на ерата на Unix ще дойде през 2038 г

факт:максималното двоично число в 32-битовите системи е числото 01111111 11111111 11111111 11111111 , преобразувайки го в десетичен, получаваме числото 2147483647.

19 януари 2038 гв 03:14:08 ще дойде момент, в който броят на секундите, изминали от началото на ерата на Unix, ще надхвърли максималния наличен в 32-битова система, числото = 2147483647. Ако битът препълни, датата ще бъде нулиране.

Много е лесно да се тества тази теория с илюстративен пример:

  • Отворете стандартния калкулатор на Windows, натиснете ALT + 3, това ще го преведе в инженерен изглед;
  • Задайте 4 байтов режим и десетичен тип на въвеждане;
  • Напишете числото 2147483647 ;

  • Обърнете внимание на представянето на числото в двоично;
  • Добавете едно към числото;

  • Резултатът от събирането е отрицателно число!

Ако продължим да добавяме едно, тогава получаваме циклично затваряне.

Това звънене на датата ще се случи от 19 януари 2038 г. на всички системи, използващи 32-битовата архитектура.

Всъщност не бива да сте тъжни, защото разработчиците на компютърни системи все повече въвеждат 64-битови архитектури в широко използване. Ще вярваме, че ще имат време до 2038 г.

Сега нека поговорим за използването на времеви печат на unix php, mysqlи дори в javascript.

Работа с unix timestamp

Много важен момент при работа с unix timestamps в php или mysql е необходимостта от ясно разбиране на плюсовете и минусите на такъв формат за дата.

Например, TIMESTAMPне може да се използва за настройка на исторически събития или събития от далечното бъдеще. Целият набор от дати е ограничен до периода от 1970 г. до началото на 2038 г. Ако зададете дата, която е извън обхвата на 2038 г., тя няма да бъде интерпретирана правилно от 32-битова система.

Осъзнавайки това ограничение, възниква логичен въпрос: " Защо да се занимавате с представяне на дата за секунди?"

Кога да използвате Unix Timestamp

Необходими са 8 байта за представяне на времето в обичайната ни система за измерване, а за unix timestamp наполовина по-малко - 4 байта.

Спестяването на количество данни според мен е основният и безспорен плюс при използването на Unix Time.

Освен това има редица полезни нюанси, налични при работа с тях UNIX времеви печат в mysql. И тъй като цялата информация трябва да се съхранява на сървъра на базата данни, а той от своя страна има редица предимства при работа с Unix timestamp, изборът към unix timestamp може да бъде правилно обоснован от следните разпоредби.

MySQL предоставя съответен тип данни Timestamp за работа с формат за време unix, като зададем който веднага получаваме полезно предимство пред стандартните формати ДАТАИ ВРЕМЕ ЗА СРЕЩА. Предимството е, че когато добавите нов запис към таблица, колоната с този тип данни се попълва автоматично. А това означава, че можем да спестим не само от количеството данни, но и от времето на процесора на уеб сървъра.

За да подсилим думите с дела, нека си поставим следната задача: когато регистрирате нов потребител в системата, трябва да въведете датата на добавянето му в базата данни.

Ако типът на полето, съхраняващо датата в таблицата е ВРЕМЕ ЗА СРЕЩА, тогава заявката от PHP скрипта ще изглежда така:

Ползата е очевидна!

Има и минус: ако има няколко полета от тип TIMESTAMP, само първото се актуализира автоматично.

Има ли смисъл да се използва INT вместо timestamp

Много програмисти, когато работят с unix времеви печати, използват целочисления формат int(11) . Това изобщо не е рационален подход към въпроса, тъй като MySQL предоставя много полезни функции за типа timestamp, които влияят върху скоростта на работа с него. Следователно, съхранявайки времевата марка в INT, ние ще се лишим от всякаква поддръжка на сървъра за този формат. Това е приблизително същото като съхраняването на идентификатор във тип varchar(11).

Има обаче едно основание за запазване unix времеви печат към int. При прехвърляне на база данни между различни СУБД може да възникне конфликт на типа, т.е. за една от СУБД типът времеви печат може да е непознат. В този случай използването на int ще има предимство, тъй като този формат присъства във всички СУБД.

Кратко описание на MySQL календарни типове

TIMESTAMP- тип данни за съхранение на дата и час. Данните се съхраняват като броя секунди, които са изминали от началото на "епохата на Unix". Диапазон на стойността: 1970-01-01 00:00:00 - 2038-12-31 00:00:00. Заема 4 байта.

ДАТА- тип данни за съхранение на дата. Диапазон на стойността: 1000-01-01 - 9999-12-31. Заема 3 байта.

ВРЕМЕ ЗА СРЕЩА- тип данни за съхранение на дата и час. Диапазон на стойностите: 1000-01-01 00:00:00 - 9999-12-31 00:00:00. Той отнема 8 байта и се съхранява като число YYYYMMDDHHMMSS./p>

ГОДИНА- тип данни за съхраняване на годината. Диапазон на стойностите: 1901 - 2155. Заема 1 байт.

ВРЕМЕ- тип данни за съхранение на времето. Диапазон на стойностите: -828:59:59 - 828:59:59. Заема 3 байта.

превод на дата в unix

Време е да изложим някои полезни функции за преобразуване на дати в unix времеви печати обратно от unix-времена четлива дата.

Как да получите текущото време в UNIX

  • PHP:

    време();

  • JavaScript:

    Math.round(new Date() .getTime() / 1000.0 ) ;

  • MySQL:

    ИЗБЕРЕТЕ unix_timestamp(сега()) ;

Какво е Unix време или Unix епоха (Unix epoch или Unix time или POSIX time или Unix timestamp)?

UNIX time или POSIX time (англ. Unix time) е метод за кодиране на времето, възприет в UNIX и други POSIX-съвместими операционни системи.
Началната точка е полунощ (UTC) от 31 декември 1969 г. до 1 януари 1970 г., времето от този момент се нарича "UNIX ера" (англ. Unix Epoch).
UNIX времето е в съответствие с UTC, по-специално, когато се декларират UTC високосни секунди, съответните секунди се повтарят.
Начинът за съхранение на времето като брой секунди е много удобен за използване при сравняване на дати (с точност до секундата), както и за съхранение на дати: ако е необходимо, те могат да бъдат преобразувани във всеки четим от човека формат. Датата и часът в този формат също заемат много малко място (4 или 8 байта, в зависимост от размера на машинната дума), така че е разумно да се използват за съхранение на големи количества дати. Недостатъците на производителността могат да се появят, когато достъпът до елементи от дата като броя на месеца и т. н. е много често. Но в повечето случаи е по-ефективно времето да се съхранява като една стойност, а не като набор от полета.

Преобразувайте епохата на Unix в четлива от човека дата


Начална и крайна дата на Unix на година, месец или ден


Преобразувайте секундите в дни, часове и минути


Как да вкарам Unix време в...

Perlвреме
PHPвреме()
рубинВреме.сега (или Време.ново). За извеждане: Time.now.to_i
Pythonпърво импортирайте време, след това time.time()
Javaдълга епоха = System.currentTimeMillis()/1000;
Microsoft .NET C#епоха = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
VBScript/ASPDateDiff("s", "01/01/1970 00:00:00", Сега())
Ерлангcalendar:datetime_to_gregorian_seconds(calendar:now_to_universal_time(сега()))-719528*24*3600.
MySQLИЗБЕРЕТЕ unix_timestamp(сега())
PostgreSQLИЗБЕРЕТЕ екстракт(епоха ОТ сега());
SQL сървърИЗБЕРЕТЕ DATEDIFF(и, "1970-01-01 00:00:00", GETUTCDATE())
JavaScriptMath.round(new Date().getTime()/1000.0) getTime() връща времето в милисекунди.
Unix/Linuxдата +%s
Друга ОСКоманден ред: perl -e "време за печат" (Ако Perl е инсталиран на вашата система)

Преобразуване на дата в Unix време за...

PHPmktime( часовник, минути, секунди, месец, ден, година)
рубинTime.local( година, месец, ден, часовник, минути, секунди, ползване) (или Time.gm за GMT/UTC изход). За да изведете добавете .to_i
Pythonпърво време за импортиране, след това int(time.mktime(time.strptime("2000-01-01 12:34:00", "%Y-%m-%d %H:%M:%S")))
Javaдълга епоха = нова java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse("01/01/1970 01:00:00");
VBScript/ASPDateDiff("s", "01/01/1970 00:00:00", поле за дата)
MySQLИЗБЕРЕТЕ unix_timestamp( време) Формат на часа: ГГГГ-ММ-ДД ЧЧ:ММ:СС или ГГММДД или ГГГГММДД
PostgreSQLИЗБЕРЕТЕ екстракт(епоха ОТ дата("2000-01-01 12:34"));
С клеймо за дата: ИЗБЕРЕТЕ ЕКСТРАКТ(ЕПОХА ОТ ЧАСОВА КАЗКА С ЧАСОВА ЗОНА "2001-02-16 20:38:40-08"); Интервал: ИЗБЕРЕТЕ ЕКСТРАКТ(ЕПОХА ОТ ИНТЕРВАЛ "5 дни 3 часа");
SQL сървърИЗБЕРЕТЕ DATEDIFF(и, "1970-01-01 00:00:00", поле за дата)
Unix/Linuxдата +%s -d"1 януари 1980 г. 00:00:01"

Преобразуване на Unix времето в четлива от човека дата...

PHPдата( Форматиране, unix време);
рубинTime.at( unix време)
Pythonпърво време за импортиране, след това time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.localtime( unix време)) Заменете time.localtime с time.gmtime за GMT дата.
JavaНиз дата = нов java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date ( unix време*1000));
VBScript/ASPДатаДобавяне("s", unix време, "01/01/1970 00:00:00")
PostgreSQLИЗБЕРЕТЕ ЧАСОВА КАЗКА С ЧАСОВА ЗОНА "епоха" + unix време* ИНТЕРВАЛ "1 секунда";
MySQLfrom_unixtime( unix време, по избор, изходен формат) Стандартен изходен формат ГГГ-ММ-ДД ЧЧ:ММ:СС
SQL сървърDATEADD(и, unix време, "1970-01-01 00:00:00")
Microsoft Excel=(A1 / 86400) + 25569 Резултатът ще бъде в часовата зона GMT. За други часови зони: =((A1 +/- разлика в зоната) / 86400) + 25569.
linuxдата -d@1190000000
Друга ОСКоманден ред: perl -e "отпечатайте скалар(localtime( unix време))" (Ако Perl е инсталиран) Заменете "localtime" с "gmtime" за часовата зона GMT/UTC.

За какво е инструментът "Unixtime converter"?

Този инструмент, на първо място, ще бъде полезен за уеб администратори, които постоянно се занимават с големи обеми дати или често се позовават на техните елементи в работата си. Използвайки инструмента "Unixtime Converter", можете лесно да преобразувате Unix времето в удобна за потребителя дата (и обратно), да разберете текущото време на Unix епоха и да получите Unix времето в различни езици за програмиране, СУБД и операционни системи.

Какво е Unix Time?

Ерата Unix (Unix epoch) започва в нощта на 31 декември 1969 г. срещу 1 януари 1970 г. Именно тази дата беше взета за начална точка на „компютърното“ време, което се изчислява в секунди и заема много малко дисково пространство – само 4 или 8 байта. С този метод на кодиране програмистите могат да „скрият“ всяка дата в едно число и лесно да я конвертират обратно в удобен за потребителя формат.

Unix времето (наричано още Unix време или POSIX време) е удобно за използване в различни операционни системи и езици за програмиране, тъй като се показва като една стойност, а не определен брой полета, които заемат място. В допълнение, UNIX времето е напълно в съответствие със стандарта UTC (включително в високосни години) - в този случай съответните секунди просто се повтарят.

Unix терминология

Няколко думи за термините.

Така, Unix време(или POSIX време) е броят на секундите, изминали от полунощ, 1 януари 1970 г., до момента.

Unix Timestamp(timestamp) е "фиксиран" час, с други думи, конкретна дата, отпечатана в число.

UTC(Universal Coordinated Time) е универсалното координирано време, което е „фиксирано“ на нулевия меридиан и от което се отчитат географските часови зони.

Колко издръжлива е тази система?

Само след няколко десетилетия, а именно на 19 януари 2038 г. в 03:14:08 UTC, времето в Unix ще достигне стойността 2147483648 и компютърните системи могат да интерпретират това число като отрицателно. Ключът към решаването на този проблем се крие в използването на 64-битова (вместо 32-битова) променлива за съхраняване на времето. В този случай запасът от числови стойности на времето в Unix ще бъде достатъчен за човечеството за още 292 милиарда години. Не е лошо, нали?

Времето в Unix е едно и също за всички

Ако живеете в Лондон или Сан Франциско, а приятелите ви са в Москва, тогава можете да "проверите часовника" с помощта на Unix времето: тази система в момента е една и съща за целия свят. Естествено, ако времето на сървърите е настроено правилно. И с инструмента "unixtime конвертор"такова преобразуване ще ви отнеме част от секундата.

Този инструмент е необходим, за да се преобразува датата от Unix TimeStamp формат в четима от човека дата и обратно.

Какво е Unix времето и за какво се използва?За да разберем за какво се използва това, ще започна с общата концепция за това какво е времето в Unix.

Unix време (или TimeStamp, което означава "времево клеймо" на руски и има същото значение)е броят на секундите от 1 януари 1970 г. Това означава, че Unix TimeStamp към момента на 01/01/1970 00:00:00 беше равен на 0. След 2 минути (120 секунди) Unix времето вече беше 120. Например, ден по-късно (01/02 /1970 00:00:00) Unix времето вече е равно на 86400, тъй като са минали 60*60*24=86400 секунди. Сега Unix Time Stamp вече е 1561815370 и числото непрекъснато расте, тъй като секундите непрекъснато тиктакат.

Но защо да го използвате?Работата е там, че Unix TimeStamp е удобен за използване за съхраняване и манипулиране на дати при програмиране. Няма да навлизам в подробности, но накратко, много по-удобно е да се брои и сравнява число, отколкото низ с "леви" символи. Ето защо повечето разработчици използват Unix TimeStamp за работа с дати в своите проекти, а в базата данни често виждаме едно много голямо число в полето `date`, което изобщо не прилича на дата.

Тук този инструмент е полезен. С него можете лесно да преведете това „голямо число от базата данни“ в дата, която може да се чете от човека. Освен това, можете дори да направите обратното и да превърнете всяка дата в Unix TimeStamp. Това са функциите, с които този конвертор е надарен.

Проблемът от 2038 г

Както казах преди, номерът Unix TimeStampвсяка секунда става повече с 1. Рано или късно, границата на това число трябва да дойде и ще бъде точно през 2038 година. Работата е там, че максималният брой в 32-битовите операционни системи, често срещани в началото на 21-ви век, е 2 31 . Това е числото, което Unix TimeStamp ще достигне през 2038 г.

→ И решението на този проблем вече е намерено. За да не спират сайтовете да отчитат правилно времето през 2038 г., е достатъчно да използвате 64-битова операционна система на хостинг/VDS/назначен сървър, а не 32-битова. С бързо нарастващия капацитет на компютрите и намаляването на тяхната цена, всичко се насочва към факта, че до 2038 г. по-голямата част от услугите в областта на предоставянето на пространство за сайта ще се предоставят на базата на 64-битова ОС. Между другото, в 64-битова система такъв проблем няма да ни засегне поне 292 милиарда години, което е напълно достатъчно за разглеждане проблем от 2038 гразрешени.

UNIX time или POSIX time (англ. Unix time) е удобен начин за кодиране на времето, възприет като основен в UNIX и други POSIX-съвместими операционни системи.
Самото време се записва в изминали секунди от началото на епохата на Unix, която започна в полунощ (UTC) от 31 декември 1969 г. до 1 януари 1970 г. Unix времето е в съответствие с UTC, по-специално при деклариране на UTC високосни секунди - съответните секунди се повтарят.

Този метод за съхранение се поддържа от много системи и е много удобен, например датите се сравняват с най-близката секунда, а съхранението е компактно и лесно се преобразува във всеки четим формат. Разбира се, има и недостатъци, например при често достъп до елементи за дата, като номер на месеца и т.н. Въпреки това, в повечето случаи ефективността се постига чрез съхраняване на датата като единична стойност, вместо набор от полета.

Получаване на UnixTime в различна "обитаема" среда:

Perlвреме
PHPвреме()
рубинВреме.сега (или Време.ново). За извеждане: Time.now.to_i
Pythonпърво импортирайте време, след това time.time()
Javaдълга епоха = System.currentTimeMillis()/1000;
Microsoft .NET C#епоха = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
VBScript/ASPDateDiff("s", "01/01/1970 00:00:00", Сега())
Ерлангcalendar:datetime_to_gregorian_seconds(calendar:now_to_universal_time(сега()))-719528*24*3600.
MySQLИЗБЕРЕТЕ unix_timestamp(сега())
PostgreSQLИЗБЕРЕТЕ екстракт(епоха ОТ сега());
SQL сървърИЗБЕРЕТЕ DATEDIFF(и, "1970-01-01 00:00:00", GETUTCDATE())
JavaScriptMath.round(new Date().getTime()/1000.0) getTime() връща времето в милисекунди.
Unix/Linuxдата+%s
Друга ОСКоманден ред: perl -e "време за печат" (Ако Perl е инсталиран на вашата система)

Как да конвертирам редовна дата в UnixTime?

PHPmktime( часовник, минути, секунди, месец, ден, година)
рубинTime.local( година, месец, ден, часовник, минути, секунди, ползване) (или Time.gm за GMT/UTC изход). За да изведете добавете .to_i
Pythonпърво време за импортиране, след това int(time.mktime(time.strptime("2000-01-01 12:34:00", "%Y-%m-%d %H:%M:%S")))
Javaдълга епоха = нова java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse("01/01/1970 01:00:00");
VBScript/ASPDateDiff("s", "01/01/1970 00:00:00", поле за дата)
MySQLИЗБЕРЕТЕ unix_timestamp( време) Формат на часа: ГГГГ-ММ-ДД ЧЧ:ММ:СС или ГГММДД или ГГГГММДД
PostgreSQLИЗБЕРЕТЕ екстракт(епоха ОТ дата("2000-01-01 12:34"));
С клеймо за време: ИЗБЕРЕТЕ ЕКСТРАКТ(ЕПОХА ОТ ВРЕМЕТА С ЧАСОВА ЗОНА "2001-02-16 20:38:40-08"); С интервал: ИЗБЕРЕТЕ ЕКСТРАКТ(ЕПОХА ОТ ИНТЕРВАЛ "5 дни 3 часа");
SQL сървърИЗБЕРЕТЕ DATEDIFF(и, "1970-01-01 00:00:00", поле за дата)
Unix/Linuxдата +%s -d"1 януари 1980 г. 00:00:01"

Преобразувайте обратно, UnixTime секунди в четлива от човека дата:

PHPдата( Форматиране, unix време);
рубинTime.at( unix време)
Pythonпърво време за импортиране, след това time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.localtime( unix време)) Заменете time.localtime с time.gmtime за GMT дата.
JavaНиз дата = нов java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date ( unix време*1000));
VBScript/ASPДатаДобавяне("s", unix време, "01/01/1970 00:00:00")
PostgreSQLИЗБЕРЕТЕ ЧАСОВА КАЗКА С ЧАСОВА ЗОНА "епоха" + unix време* ИНТЕРВАЛ "1 секунда";
MySQLfrom_unixtime( unix време, по избор, изходен формат) Стандартен изходен формат ГГГ-ММ-ДД ЧЧ:ММ:СС
SQL сървърDATEADD(и, unix време, "1970-01-01 00:00:00")
Microsoft Excel=(A1 / 86400) + 25569 Резултатът ще бъде в часовата зона GMT. За други часови зони: =((A1 +/- разлика в зоната) / 86400) + 25569.
linuxдата -d@1190000000
Друга ОСКоманден ред: perl -e "отпечатайте скалар(localtime( unix време))" (Ако Perl е инсталиран) Заменете "localtime" с "gmtime" за часовата зона GMT/UTC.

Повечето от информацията е открадната от: