【问题标题】:how to subtract two dates and times to get difference如何减去两个日期和时间以获得差异
【发布时间】:2010-07-30 11:29:22
【问题描述】:

当用户注册电子邮件包含六小时后失效的链接时,我必须发送电子邮件 发送电子邮件时我在做什么我使用“日期时间”类型的字段 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];

我不知道如何继续请帮助

【问题讨论】:

标签: php datetime


【解决方案1】:
<?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&lt;Now()
的查询 许多 rdbms 对日期/时间算法有合理/良好的支持。

【讨论】:

  • 嗯,这似乎不适用于所有版本的 PHP。我没有diff() 方法...
  • 没错。手册上写着(PHP 5 &gt;= 5.3.0),它于 2009 年 6 月发布;-)
  • 我知道,疯了 :-/ 我想我应该改变我的托管服务提供商......我有 5.2.x
【解决方案2】:

您可以将两个日期都转换为Unix epoch times,即自 1969 年 12 月 31 日午夜以来的等效秒数。从中您可以轻松推断出两个日期之间经过的时间量.为此,您可以使用mktime()strtotime()

一切顺利。

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 您是从保存的时间日期中减去当前时间日期,结果将以小时为单位是吗?
    • 嘿,它正在为同一天制造问题,假设我必须找到同一天的差异,它会导致负值
    【解决方案4】:

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

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

    "SELECT FROM table WHERE savedTime &lt; " . (time() - 6 * 3600)

    【讨论】:

    • 不确定它是否能回答问题,但这是我一直在寻找的答案
    【解决方案5】:

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

    【讨论】:

    • $hoursDiff = ( time() - strtotime("2010-07-30 13:11:50") )/(60 * 60);这段代码给出否定结果你能帮我吗?这正在发生
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多