0

我将 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 的日期。

感谢您的任何建议!

4

2 回答 2

3
<?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 类的强大功能。

DateTime 类的 PHP 官方文档链接如下: PHP DateTime 类

于 2020-05-04T18:20:31.617 回答
2

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

$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

于 2020-05-04T18:38:06.267 回答