PHP在日期和今天日期之间计数

时间:2016-10-01 00:18:01

标签: php mysql date

在我的dates数据库中,我有一个日期表,其中有两个后续要完成,一个在30天后,一个在60天后。我需要构建一个使用MySQL查询的页面来从dates表中提取30day值为No的所有日期(我可以这样做)。现在棘手的部分是,我需要它只输出符合该标准的日期,并且是从当前日期起30天。

例如:8月4日& 6的30day值为No,8月5日的30day值为Yes。今天的日期是9月4日。提前30天将是8月5日。

我需要查询在这种情况下仅显示8月4日,因为自8月6日和8月5日以来还没有30天。

我不确定使用什么样的函数来进行此计数。感谢您的帮助

修改

Date - 30day Value
July 1 - Yes
July 5 - No
August 1 - No
August 5 - No
August 6 - Yes

今天的日期是9月2日。

该表格将显示在7月5日和8月1日,因为它们的30天值为“否”,并且从今天起超过30天。

3 个答案:

答案 0 :(得分:2)

您应该使用 DATEDIFF 功能:

SELECT ....
FROM your_table
WHERE DATEDIFF(CURDATE(), event_date) = 30

event_date 是您的日期列的示例。

答案 1 :(得分:1)

MySQL DATEDIFF函数允许您在查询中减去2个日期。

http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_datediff

  

DATEDIFF()返回expr1 - expr2表示为从一个日期到另一个日期的天数值。 expr1和expr2是日期或日期和时间表达式。在计算中仅使用值的日期部分。

例如:

SELECT some_id, date_column
FROM date_table
WHERE DATEDIFF(CURDATE(), date_column) = 30

您也可以选择这样的30天和60天,并且截止日期为60天,因此它不会搜索整个表格:

SELECT some_id, date_column
FROM date_table
WHERE date_column>=DATE_SUB(CURDATE(), INTERVAL 60 DAY)
AND DATEDIFF(CURDATE(), date_column) IN (30, 60)

由于我在理解你所问的内容时做了一些假设,你可能也想做这个,这会将结果归结为“是”'或者'否'在结果集中:

SELECT some_id, date_column,
CASE DATEDIFF(CURDATE(), date_column)
    WHEN 60 THEN 'Yes'
    WHEN 30 THEN 'Yes'
    ELSE 'No'
END CASE AS is_3060_day
FROM date_table
WHERE date_column>=DATE_SUB(CURDATE(), INTERVAL 60 DAY)

或者如果你想在PHP方面完成这个,你可以使用PHP的date_diff函数:

http://php.net/manual/en/function.date-diff.php

function dateDifference($date_1 , $date_2 , $differenceFormat = '%a' )
{
    $datetime1 = date_create($date_1);
    $datetime2 = date_create($date_2);

    $interval = date_diff($datetime1, $datetime2);

    return $interval->format($differenceFormat);

}
$result = dateDifference($date1, $date2)
if ($result==30 || $result==60) {
    // Do something
}

答案 2 :(得分:1)

你可以获取两个日期并使用php函数

$prevdate = date_create("2013-03-15");
$currdate = date_create("2013-12-12");
$diff = date_diff($prevdate,$currdate);
echo $diff->format("%R%a days");

输出

272 days