如何减去两个日期和时间以获得差异

时间:2010-07-30 11:29:22

标签: php datetime

当用户注册电子邮件包含六小时后无效的链接时,我必须发送一封电子邮件 发送电子邮件时我正在做什么我用类型为“datetime”的字段emailSentDate更新数据库 现在我得到了当前的日期和时间,并且已经达到了与db现在相同的格式,我现在想要发现这些日期和时间都有6小时的差异,以便我可以使链接无效但我不知道如何这样做

我的代码看起来像这样我只使用db的硬编码值,例如

$current_date_time=date("Y-m-d h:i:s");
$current=explode(" ",$current_date_time);
$current_date=$current[0];
$current_time=$current[1];
$db_date_time="2010-07-30 13:11:50";
$db=explode(" ",$db_date_time);
$db_date=$db[0];
$db_time=$db[1];

我不知道如何继续下载帮助

5 个答案:

答案 0 :(得分:19)

<?php
//$now = new DateTime(); // current date/time
$now = new DateTime("2010-07-28 01:11:50");
$ref = new DateTime("2010-07-30 05:56:40");
$diff = $now->diff($ref);
printf('%d days, %d hours, %d minutes', $diff->d, $diff->h, $diff->i);

打印2 days, 4 hours, 44 minutes

请参阅http://docs.php.net/datetime.diff

编辑:但您也可以将问题更多地转移到数据库端,例如通过在表中存储过期日期/时间,然后执行类似的查询 ... WHERE key='7gedufgweufg' AND expires<Now()
许多rdbms对日期/时间算法有合理/良好的支持。

答案 1 :(得分:3)

你可以做的是将你的两个日期转换为Unix epoch times,即自1969年12月31日午夜起的相应秒数。从中你可以很容易地推断出它之间的时间。两个约会。为此,您可以使用mktime()strtotime()

一切顺利。

答案 2 :(得分:2)

$ hoursDiff =(time() - strtotime(“2010-07-30 13:11:50”))/(60 * 60);

答案 3 :(得分:1)

我宁愿使用时间戳:将“time()”返回的值保存为“savedTime”到数据库(这是一个以秒为单位的时间戳)。当您检查六个小时时,从“time()”中减去该数字。

if ((time() - savedTime) > 6 * 3600) // more than 6h ago

"SELECT FROM table WHERE savedTime < " . (time() - 6 * 3600)

答案 4 :(得分:0)

这可能是您问题的解决方案 - &gt; How to calculate the difference between two dates using PHP?