Преобразовать отметку времени unix в дату и время в миллисекундах в MySQL - PullRequest
0 голосов
/ 13 марта 2020

Проблема

Преобразование unix метки времени в дату и время при сохранении миллисекунд.

Фон

Я получаю unix отметка времени в следующем формате:

  • 1584049707

Затем я пытаюсь отправить его с помощью PHP в столбец в MySQL, то есть datetime(3) с использованием TO_TIMESTAMP(). Я также пытался FROM_UNIXTIME(), но с теми же результатами.

SQL

$sql = "
  INSERT INTO assoc_table (timestart, timeend) 
  VALUES (TO_TIMESTAMP(:timestart), TO_TIMESTAMP(:timeend))
";

Результат

  • 2020-03-12 22: 42: 23.000

Почему-то не регистрируются миллисекунды.

Желаемый результат

  • Чтобы вывести миллисекунды из отметки времени unix в столбец даты и времени.

Ответы [ 2 ]

2 голосов
/ 13 марта 2020

метки времени эпохи представляют собой тогда число секунд , истекшее с 1 января 1970 года; если вам нужны дробные секунды, он должен иметь дробную часть ... что не относится к вводу, который вы даете MySQL; это отражается на результатах, которые вы получаете.

С учетом метки времени эпохи с дробной частью, from_unixtime() работает как ожидалось:

select from_unixtime(1584049707.123)

Возвращает:

2020-03-12 21:48:27.123

Примечание: datetime(3) является релевантным формат для хранения такого значения.

0 голосов
/ 13 марта 2020

Создание объекта даты и времени с помощью php назначает эпоху, а затем форматирование должно работать:

$epoch = 1584049707;
$dt = new DateTime("@$epoch");
echo $dt->format('Y-m-d H:i:s.u');

, если вам нужно выполнить преобразование на MySQL, проверьте эту документацию: https://www.epochconverter.com/programming/mysql

должно выглядеть так:

DATE_ADD(FROM_UNIXTIME(0), interval -315619200 second),'%Y-%m-%d-%f');

, где -315619200 - ваша эпоха

...