将来自 SQL 数据库的时间戳转换为字符串

Convert timestamp coming from SQL database to String

我将 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 能够将几乎所有内容转换为时间戳,但包含时间戳的简单字符串是不可能的。结果仍然保留在 Brian Adams 可能最喜欢的一年的最后一天。

我通过将 $timestamp 转换为浮点值取得了一些进展,如下所示:echo date("d.m.Y", floatval($timestamp));。然而,现在事情真的让我感到困惑。我似乎已经成功转换了我的时间戳,但是,date() 给了我 02.09.52299 左右的日期。

我使用的时间戳是当前时间的时间戳,例如1588489252657,目前指向日期 23.03.52307.

所以我只想找到一个基于时间戳 1588489252657 的日期,以便在我的屏幕上看到 03.05.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 时尚的另一种方法。您可以利用 PHP 的 DateTime Class 的强大功能。

PHP DateTime 的官方文档 Class Link 下面: PHP DateTime Class

您必须先将时间戳转换为秒。

$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