检查日期和时间是否已过3天

时间:2013-07-02 21:55:16

标签: php datetime

我有一个字符串,其日期和时间格式为2013-07-01 19:10:05 (Y-m-d H:i:s)。 当我从存储日期和时间的数据库输出数据时,我想看看自日期和时间以来是否已经过了三天。

实施例: 存储在数据库中的是2013-07-01 00:00:00。 存储日期和时间后3天将是2013-07-03 00:00:00

如果确实如此,我想回复一些文字。

我尝试了以下但我认为我完全没有航行。

if( strtotime('-3 days') < strtotime($row["orderdatetime"]) ) {
   echo " <img src='imgs/warning.png' ></td >";
}

感谢任何帮助!

此致  安德烈亚斯

修改

这就是我的PHP脚本的样子。

if ($row["confirmeddatetime"] == "0000-00-00 00:00:00" ) {
        $db_datetime = new DateTime($row['orderdatetime']);
        $db_plus_three = $db_datetime->add(new DateInterval('P3D'));
        $now_datetime = new DateTime();
        if ($db_plus_three < $now_datetime) {
            echo " <img src='imgs/warning.png' ></td >";
        } else {
            echo "</td >";
        }

你们中的任何人都可以确定是否有问题吗?

5 个答案:

答案 0 :(得分:2)

我建议使用DateTime和DateInterval类。

$db_datetime = new DateTime($row['orderdatetime']);
$db_plus_three = $db_datetime->add(new DateInterval('P3D'));
$now_datetime = new DateTime();

if ($db_plus_three < $now_datetime) {
   // this is more than 3 days old
}

另一种方法是在DB查询中设置一个标志,如下所示:

SELECT
    [YOUR CURRENT FIELDS HERE],
    (CASE WHEN NOW() > DATE_ADD(orderdatetime, INTERVAL 3 DAYS) THEN 1 ELSE 0) AS three_days_old
    [REST OF QUERY HERE]

然后,您可以通过查看three_days_old值来轻松识别该项目是否超过3天。

答案 1 :(得分:1)

可能最简单的方法是直接从数据库获取unix时间(假设是mysql):

SELECT *, UNIX_TIMESTAMP(orderdatetime) AS ordertimestamp...

然后在你的比较中你只需要

if( strtotime('-3 days') < $row["ordertimestamp"] ) {
   echo " <img src='imgs/warning.png' ></td >";
}

答案 2 :(得分:0)

strtotime将时间字符串转换为时间戳,该时间戳只是整数秒。只需比较时间减去3 * 86400(一天中的秒数)

答案 3 :(得分:0)

SELECT (orderdatetime <= NOW() + INTERVAL 3 DAY) AS threedays ...

如果3天过去了,你会得到1/0的真/假值。我建议不要在PHP中进行这样的比较,因为你将强制使用mysql日期 - &gt; string - &gt; int - &gt;日期转换链,当您可以直接在mysql中进行比较时,浪费了大量的CPU周期。

答案 4 :(得分:0)

实际上你的第二个例子对我有用,只要注意add()函数,它就会更新值本身。这是我自己如何使用它的类似示例:

/**
 * Checks if the elapsed time between $startDate and now, is bigger
 * than a given period. This is useful to check an expiry-date.
 * @param DateTime $startDate The moment the time measurement begins.
 * @param DateInterval $validFor The period, the action/token may be used.
 * @return bool Returns true if the action/token expired, otherwise false.
 */
function isExpired(DateTime $startDate, DateInterval $validFor)
{
  $now = new DateTime();

  $expiryDate = clone $startDate;
  $expiryDate->add($validFor);

  return $now > $expiryDate;
}

// how to use it
$startDate = new DateTime('2013-06-16 12:36:34');
$validFor = new DateInterval('P3D'); // valid for 3 days
$isExpired = isExpired($startDate, $validFor);