Перетворіть часові позначки Unix в читану людиною дату за допомогою MySQL


222

Чи є функція MySQL, яка може бути використана для перетворення часової позначки Unix у читану людиною дату? У мене є одне поле, де я зберігаю часи Unix, і тепер я хочу додати ще одне поле для людських читаних дат.


1
Функції дати та часу в посібнику для mySQL
Pekka

Відповіді:



108

Те, що не вистачає в інших відповідях (станом на цей текст), і не очевидно, що це from_unixtimeможе прийняти другий параметр, щоб вказати такий формат:

SELECT
  from_unixtime(timestamp, '%Y %D %M %H:%i:%s')
FROM 
  your_table

20
Дуже незначна проблема, але% h - години у 12-годинному форматі, для чого тоді потрібен% p для повноти (AM / PM). Або% H дає години у 24-годинному форматі.
тлум


19

Вам потрібна часова мітка Unix у визначеному часовому поясі?

Ось один лайнер, якщо у вас є швидкий доступ до mysql cli:

mysql> select convert_tz(from_unixtime(1467095851), 'UTC', 'MST') as 'local time';

+---------------------+
| local time          |
+---------------------+
| 2016-06-27 23:37:31 |
+---------------------+

Замініть 'MST'потрібний часовий пояс. Я живу в Арізоні 🌵 таким чином перехід від UTC до MST.


7

Навіщо турбуватися збереженням поля як читаного? Тільки миAS

SELECT theTimeStamp, FROM_UNIXTIME(theTimeStamp) AS readableDate
               FROM theTable
               WHERE theTable.theField = theValue;

EDIT: Вибачте, ми зберігаємо все в мілісекундах, а не в секундах. Виправлено це.


4

Ви можете використовувати функцію DATE_FORMAT. Ось сторінка з прикладами та шаблонами, за допомогою яких можна вибрати різні компоненти дати.



1

Оскільки я не знав цього питання, що mysql завжди зберігає час у полях часових міток у UTC, але відображатиметься (наприклад, phpmyadmin) у місцевому часовому поясі, я хотів би додати свої висновки.

У мене автоматично оновлено поле last_modified, визначене як:

`last_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

Дивлячись на це за допомогою phpmyadmin, схоже, це місцевий час, всередині це UTC

SET time_zone = '+04:00'; // or '+00:00' to display dates in UTC or 'UTC' if time zones are installed.
SELECT last_modified, UNIX_TIMESTAMP(last_modified), from_unixtime(UNIX_TIMESTAMP(last_modified), '%Y-%c-%d %H:%i:%s'), CONVERT_TZ(last_modified,@@session.time_zone,'+00:00') as UTC FROM `table_name`

У будь-якому сузір’ї UNIX_TIMESTAMP і «як UTC» завжди відображаються в UTC час.

Виконайте це двічі, спочатку без встановлення часової зони.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.