Конвертировать метку времени из базы данных sql в строку - PullRequest
0 голосов
/ 04 мая 2020

Я сохраняю метку времени в SQL как bigint (20). Номер правильный и в android или https://www.epochconverter.com работает нормально.

Однако я не могу создать строку даты на основе отметки времени, полученной из базы данных.

Прежде всего, метка времени, похоже, приходит из базы данных в виде строки, поэтому я не могу просто сказать echo date("d.m.Y, $timestamp). В результате получается знаменитый 31.12.1969.

Итак, я попробовал echo date("d.m.Y, strtotime($timestamp)). Однако, несмотря на то, что strtotime, как говорят, может преобразовывать почти все в метку времени, простая строка, содержащая метку времени, невозможна. Результаты все еще остались в последний день, вероятно, любимого года Брайана Адамса.

Некоторый прогресс, которого я добился, приведя $ timestamp к значению с плавающей точкой, выглядит так: echo date("d.m.Y", floatval($timestamp));. Тем не менее, сейчас все стало действительно запутанным для меня. Похоже, я успешно преобразовал свою метку времени, однако date() дал мне даты около 02.09.52299.

Используемые метки времени - это метки времени текущего времени, например, 1588489252657, которые в настоящее время приводят к дате 23.03. .52307.

Итак, все, что я хочу, это прийти на дату, основанную на отметке времени 1588489252657, чтобы увидеть 03.05.2020 на моем экране.

Спасибо за любой совет!

Ответы [ 2 ]

3 голосов
/ 04 мая 2020
<?php

$timestamp = 1588489252657; // Timestamp in Milliseconds
$seconds = round($timestamp/1000, 0); // Timestamp Rounded to Seconds

$date = new DateTime();  // Create PHP DateTime Object
$date->setTimestamp($seconds); // Set the Timestamp
echo $date->format('Y-m-d H:i:s'); // Specify the Required Format

Ответы в значительной степени в разделах комментариев. Но я поделился этим ответом, поскольку это еще один подход в стиле OOP. Вы можете использовать возможности класса DateTime PHP.

PHP Официальная документация для класса DateTime Ссылка ниже: PHP Класс DateTime

2 голосов
/ 04 мая 2020

Сначала необходимо преобразовать метку времени в секунды.

$timestamp = 1588489252657;
$dateInUnixSeconds = round($timestamp / 1000, 0);
$date = \DateTimeImmutable::createFromFormat('U', (string) $dateInUnixSeconds);

echo $date->format('d.m.Y');

PS: я рекомендую использовать объект \DateTimeImmutable, чтобы избежать проблем с изменяемостью. https://github.com/Chemaclass/php-best-practices/blob/master/technical-skills/immutability.md

...