PHP日期-时差格式


PHP Date - Time difference formatting

我在数据库中保存了一个日期和时间,格式如下:2016-04-03 12:54:11

基本上,这个日期和时间戳表示创建某个东西的确切日期和时间。我想做的是显示第二个日期和时间,这是自第一个时间戳以来的确切天数。

因此,如果数据库中的时间戳是2016-04-03 12:54:11,而今天的日期和时间是2016-04-04 12:54:11,它将显示:Overdue by: 1 Day

到目前为止,我有:

<?PHP $dateCreated = mysql_result(mysql_query("SQL to stored date and time"),0);
                $dateNow = time();
                $dateDifference = abs(strtotime($dateCreated) - strtotime($dateNow));
                $years = floor($dateDifference / (365*60*60*24));
                $months = floor(($dateDifference - $years * 365*60*60*24) / (30*60*60*24));
                $days = floor(($dateDifference - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24)); ?>

然后:

echo "<strong>Overdue by:</strong> $days Days.";

但是,此代码显示两个日期,仅相隔一天,即相隔14天。

我们将不胜感激,干杯。

尝试使用DateTime对象。它们会让你的生活更轻松。以上可以通过以下方式实现:

$date1 = new DateTime('2016-04-03 12:54:11');
$date2 = new DateTime('2016-04-04 12:54:11');
$diff = $date1->diff($date2);

$diff变量将是一个DateInterval对象,它有一个days属性来显示两个日期之间的天数。在这种情况下1,所以你可以做:

echo "Overdue by: " . $diff->days . " days.";

将输出Overdue by: 1 days.

附带说明:您应该真的不再使用mysql_函数。它们已经被弃用多年,在最新的PHP版本中不再是PHP核心的一部分。因此,此代码无法在最新的服务器上运行。另请参阅:为什么我不应该在PHP中使用mysql_*函数?

我认为最好的方法是使用Php DateTime类来允许我们这样做。

试试这个:

$datetime1 = new DateTime("YOUR_DB_TIMESTAMP");
$datetime2 = new DateTime("today");
$difference = $datetime1->diff($datetime2);
echo difference->d;

此外,你可以选择你想要显示差异的方式。

$diff->format('%R%a days')

参考:

示例->查找两个日期之间的天数
日期时间文档->http://php.net/manual/es/class.datetime.php当做

我会使用DateTime对象来处理这样的事情,因为这确实是一个很大的帮助。

$dateCreatedObj = DateTime::createFromFormat('Y-m-d H:i:s', $dateCreated);
$dateNowObj = new DateTime();
$dateDifference = $dateCreatedObj->diff($dateNowObj);
echo $dateDifference->format('Overdue by: %a Day');

请注意,这不涉及时区、多语言和复数问题。

Diff函数返回两个DateTimeInterface对象之间的差值。

您可以尝试使用DateTime对象:

<?PHP $dateCreated = mysql_result(mysql_query("SQL to stored date and time"),0);
         $dateNow = new DateTime();
         $dateOther = new DateTime($dateCreated);
         $interval = $dateNow->diff($dateOther);
         echo $interval->format('%R%a days');