- How to convert MySQL datetime to Unix timestamp?
- От PHP к MySQL сквозь время
- Перевод времени из PHP в MySQL
- Перевести время из MySQL в PHP…
- Unix время и Unix Timestamp (MySQL, PHP, JavaScript)
- Почему Unix время начинается с 1 января 1970 года
- Конец эпохи Unix придёт в 2038 году
- Работа с unix timestamp
- Когда следует использовать Unix Timestamp
- Есть ли смысл использовать INT вместо timestamp
- Краткая характеристика календарных типов MySQL
- Перевод даты в unix
How to convert MySQL datetime to Unix timestamp?
We can convert MySQL date and time to Unix Timestamp with the help of function UNIX_TIMESTAMP().
The following is the query.
mysql> SELECT UNIX_TIMESTAMP(STR_TO_DATE('Oct 19 2018 10:00PM', '%M %d %Y %h:%i%p'));
After running the above query we will not get the output in date format as shown in the below output. The output shown here is a Unix Timestamp.
+------------------------------------------------------------------------+ | UNIX_TIMESTAMP(STR_TO_DATE('Oct 19 2018 10:00PM', '%M %d %Y %h:%i%p')) | +------------------------------------------------------------------------+ | 1539966600 | +------------------------------------------------------------------------+ 1 row in set (0.04 sec)
To get the actual date/time, query is as follows.
mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(STR_TO_DATE('Oct 19 2018 10:00PM', '%M %d %Y %h:%i%p')),'%m-%d-%Y %h:%i:%p');
The following is the output.
+-----------------------------------------------------------------------------------------------------------+ | FROM_UNIXTIME(UNIX_TIMESTAMP(STR_TO_DATE('Oct 19 2018 10:00PM', '%M %d %Y %h:%i%p')),'%m-%d-%Y %h:%i:%p') | +-----------------------------------------------------------------------------------------------------------+ | 10-19-2018 10:00:PM | +-----------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
От PHP к MySQL сквозь время
Порой нам необходимо переводить время из одного формата в другой. Например, нужно время из PHP-скрипта сохранить в базе данных MySQL. Всё бы ничего… но они по-разному работают со временем. И новички порой строят огромные костыли, чтобы, как им кажется, упростить свою жизнь.
Для этой статьи я возьму в пример метки времени PHP и формат времени MySQL.
PHP работает с метками времени UNIX. То есть время представляется в виде количества секунд, прошедших с начала дня 1 января 1970 года. И на момент написания статьи — 23:25 17 июня 2015 года — PHP показал вот такое время — 1434573224. А вот в MySQL время хранится в другом формате (типе данных). Я предпочитаю тип DATETIME. Упомянутая выше дата выглядела бы в таблице MySQL в поле с типом DATETIME так: 2015-06-17 23:25:00.
Перевод времени из PHP в MySQL
Ну так как же нам перевести время из PHP-скрипта в MySQL? Очень просто. Для начала, давайте решим, откуда в вашем скрипте берется какая-либо метка времени? Допустим, время регистрации пользователя является временем работы скрипта. В этом случае нам достаточно использовать встроенную в PHP функцию time(). Она и вернет текущую метку времени UNIX. А если вам нужно сохранить в базе данных дату, которую пользователь ввел в HTML-форму? Тут задача немного сложнее. Но она сама по себе несложная.
)\.(\d)\.(\d)$/'; $result = preg_match( $pattern, $sUserDate, $matches ); if ( $result && !empty( $matches ) ) < $day = $matches[1]; $month = $matches[2]; $year = $matches[3]; >$time = mktime( 0, 0, 0, $month, $day, $year ); // Получим метку времени 1435006800 ?>
И как теперь сохранить это в базу? Да еще и в формате типа данных MySQL DATETIME… Легко!
Нувотивсёбырь Задача решена! Проверьте 🙂
Перевести время из MySQL в PHP…
…могло бы оказаться сложнее, но нет. Это так же просто. Нет, пожалуй, это еще проще.
Скажу вам больше. Если функции UNIX_TIMESTAMP() не передавать вообще никаких аргументов, результат будет тем же. Вам вернется текущая метка времени UNIX. И делайте с ним в своем скрипте теперь то, что хотите.
Перевод времени из PHP в MySQL и из MySQL в PHP оказался делом плёвым. Вообще ерундовым. Я надеюсь, подключаться к своему СУБД вы уже умеете?
Подобные приемы очень часто нужны при написании алгоритмов регистрации и авторизации пользователей, а также просто при работе пользователя с HTML-формами, в которых он вводит дату и еще работает с динамическими списками select.
Unix время и Unix Timestamp (MySQL, PHP, JavaScript)
Здравствуйте, уважаемые читатели блога LifeExample, в данной статье, я хочу рассказать вам о том, что такое Unix время и Unix Timestamp. Часто программисты объединяют эти понятия в одно, но это не совсем верно. Кроме того, статья содержит много полезных заметок, на тему работы с Unix Timestamp в PHP , MySQL и JavaScript.
Почему Unix время начинается с 1 января 1970 года
Все дело в том, что Unix время начинает отсчет эпохи Unix, с выпуска первой UNIX системы. Первая система подобного рода была создана в 1969 году, поэтому точкой отсчета времени разработчики приняли дату с 1 января 1970 года в полночь по UTC (Всемирное координированное время).
Давайте разберемсяс тем, для чего нужны Unix время и Unix Timestamp, а также дадим им четкие понятия.
Unix время – это текущее количество секунд прошедших с 1 января 1970 года.
Unix Timestamp – это метка времени, которая представляет собой последовательность символов, отражающих количество секунд, прошедших с 1 января 1970 года.
Попробую привести пример, для разъяснения разницы этих двух понятий.
На время написания мной данного поста, Unix время было равно 1346765877.
На время прочтения, Вами, этой информации, запись о времени (1346765877) , уже является меткой — Unix Timestamp! Конвертировав данную метку времени в удобочитаемый вид, мы получим дату 04-09-2012 и время 17:37:57 .
Откровенно говоря, особого смысла разделять два понятия, на мой взгляд, нет, но все же полезно иметь представление о том, что из-себя представляет Unix Time, а также полезно понимать, что количество максимально возможных секунд прошедших с 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 timestamp в php, mysql и даже в javascript.
Работа с unix timestamp
Очень важным моментом, при работе с unix timestamp в php или mysql, является необходимость четкого понимать плюсы и минусы такого формата даты.
Например, TIMESTAMP не получится использовать для задания исторических событий или событий далекого будущего. Весь набор дат ограничен периодом с 1970 по начало 2038 года. Если задать дату, выходящую за рамки 2038, она будет не правильно интерпретирована 32 битной системой.
Осознав это ограничение, напрашивается логический вопрос: «Зачем нужно заморачиваться с представлением даты в секундах?«
Когда следует использовать Unix Timestamp
Для представления времени в обычной для нас системе его измерения, требуется 8 байт, а для unix timestamp вдвое меньше – 4 байта.
Экономия объема данных, на мой взгляд, основной и неоспоримый плюс в использовании Unix Time.
Кроме того есть ряд полезных нюансов доступных при работе с UNIX timestamp в mysql. А поскольку вся информация должна храниться на сервере баз данных, и он в свою очередь имеет ряд преимуществ, при работе с метками Unix времени, то выбор в сторону unix timestamp можно корректно обосновать следующими положениями.
В MySQL предусмотрен соответствующий тип данных Timestamp для работы с форматом unix-времени, установив который мы сразу получаем полезное преимущество, перед стандартными форматами DATE и DATETIME. Преимущество заключается в том, что выполняя операцию добавления новой записи в таблицу, столбец с этим типом данных заполняется автоматически. А это значит, что мы можем сэкономить не только на объеме данных, но и на процессорном времени веб сервера.
Для подкрепления слова делом поставим такую задачу: при регистрации нового пользователя в системе, нужно заносить дату его добавления в базу данных.
Если тип поля хранящего дату в таблице – DATETIME, то запрос из PHP скрипта будет выглядеть примерно так:
В случае, когда поле date имеет тип TIMESTAMP запрос будет таким:
Есть и минус: если полей типа TIMESTAMP несколько, автоматом обновляется, только, первое.
Есть ли смысл использовать INT вместо timestamp
Многие программисты при работе с unix timestamp, используют целочисленный формат int(11) . Это совершенно не рациональный подход к вопросу, поскольку в MySQL для типа timestamp предусмотрено множество полезных функций, влияющих на скорость работы с ним. Поэтому храня, метку времени в INT, мы лишим себя всяческой серверной поддержки этого формата. Это примерно, тоже, что хранить id в типе varchar(11) .
Тем не менее, есть одно оправдание хранения unix timestamp в INT. При переносе базы между разными СУБД, может возникнуть конфликт типов, т.е. для одной из СУБД тип timestamp может оказаться незнакомым. В этом случае использование int будет иметь преимущество, поскольку данный формат есть во всех СУБД.
Краткая характеристика календарных типов MySQL
TIMESTAMP — тип данных для хранения даты и времени. Данные хранятся в виде количества секунд, прошедших с начала «эпохи Юникса». Диапазон значений: 1970-01-01 00:00:00 — 2038-12-31 00:00:00. Занимает 4 байта.
DATE — тип данных для хранения даты. Диапазон значений: 1000-01-01 — 9999-12-31. Занимает 3 байта.
DATETIME — тип данных для хранения даты и времени. Диапазон значений: 1000-01-01 00:00:00 — 9999-12-31 00:00:00. Занимает 8 байт и хранится в виде числа YYYYMMDDHHMMSS./p>
YEAR — тип данных для хранения года. Диапазон значений: 1901 — 2155. Занимает 1 байт.
TIME — тип данных для хранения времени. Диапазон значений: −828:59:59 — 828:59:59. Занимает 3 байта.
Перевод даты в unix
Пришло время выложить несколько полезных функций по переводу даты в unix timestamp и обратно из unix-time в читабельную дату.