检查日期是否在接下来的3天PHP中

时间:2015-03-08 15:55:21

标签: php date

我的数据库中存有日期(due_date) 我想编写一个脚本来检查due_date是否在接下来的3天内

从在线检查(谷歌)我发现了一些代码,但它似乎没有用,见下文

if (time() - filemtime($due_date) >= 3 * 86400) 

{
  echo" Invoice $id is due in the next 3 days<br />";
}
else
{
echo" Invoice $id not due in the next 3 days </br>";
}

$ due_date包含格式为01/01/2015

的日期

有人可以帮帮忙吗? P.s我是新手!

由于

4 个答案:

答案 0 :(得分:2)

使用strtotime()将日期字符串转换为unix时间戳,并相应地编辑if语句:

$seconds_to_expire = strtotime($due_date) - time();
if ($seconds_to_expire < 3*86400) {
     ...

请注意,m / d / y或d / m / y格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜杠(/),那么美国m / d / y假设;而如果分隔符是破折号( - )或点(。),则假定为欧洲d-m-y格式(参见this)。您可能希望将日期转换为Y-m-d格式:

$due_date_ymd = date('Y-m-d', strtotime(str_replace('/', '-', $due_date));
$seconds_to_expire = strtotime($due_date_ymd) - time();
if ($seconds_to_expire < 3*86400) {
    ...

答案 1 :(得分:1)

更改

filemtime($due_date)

strtotime(str_replace('/', '-', $due_date))

如果第一天出现,您必须将/更改为-,否则php会假设首先是月份!

答案 2 :(得分:0)

您可以将DB日期值(格式为&#39; yyyy-mm-dd&#39;)转换为DateTime对象,然后进行比较:

$d = DateTime::createFromFormat('Y-m-d', $due_date);
$d->modify('-3 days');  // subtract 3 days from due date
if ($d < new DateTime()) {
    echo 'date is due within 3 days';
}

注意:

  1. new DateTime()将为您提供当前日期。
  2. 我认为$due_date是格式为&#39; yyyy-mm-dd&#39;的字符串,如果它是数据库中的Date列,则应该得到。

  3. 由于您评论$due_date是&#34;日期格式为01/01 / 2015&#34;,您可以轻松调整代码:更改createFromFormat函数中的格式说明符从'Y-m-d''d/m/Y'

答案 3 :(得分:0)

if (strtotime($due_date)+60*60*24*3 =< time()+60*60*24*3) { echo "Is due in the next 3 days" } else { echo "Is not due in the next 3 days" }