PHP检查日期是今天还是最近7天

时间:2015-01-20 14:32:14

标签: php date strtotime

我正在努力解决所谓的基本问题。我想检查一下用户是否输入了有效日期。我们的申请中的有效日期是今天或接下来的7天。因此该范围内的任何日期都是有效的。过去或从现在开始的第7天起的任何日期都将被视为无效。

我写了一个小函数来解决这个问题:

function is_valid($d)
{
if( strtotime($d) < strtotime('+7 days') ) {
return true;
}
else return false;
}
Usage : is_valid('01-20-2015');  //M-D-Y

但这总是回归真实。

我做错了什么?

艾哈迈尔

3 个答案:

答案 0 :(得分:1)

正如评论中所述 - 您不要认为strtotime()无法解析输入的日期(无效的日期格式等)。

试试这段代码:

function is_valid($d)
{
   if( strtotime($d) !== FALSE && strtotime($d) < strtotime('+7 days') ) {
      return true;
   }
   return false;
}
Usage : is_valid('01-20-2015');  //M-D-Y

您还应该记住,strtotime取决于服务器的时区,described in docs

答案 1 :(得分:1)

使用 DateTime 功能更容易。

$yourDate = new \DateTime('01-20-2015');

// Set 00:00:00 if you want the aktual date remove the setTime line
$beginOfDay = new \DateTime();
$beginOfDay->setTime(0,0,0);

// Calculate future date
$futureDate = clone $beginOfDay;
$futureDate->modify('+7 days');

if($yourDate > $beginOfDay && $yourDate < $futureDate) {
    // do something
}

答案 2 :(得分:0)

strtotime无法解析该日期格式。你需要使用YYYY-MM-DD

使用此测试代码进行确认;

<?php
function is_valid($d) {
   if (strtotime($d) < strtotime('+7 day')) {
      return true;
   }
   else 
      return false;
}

var_dump(is_valid('2015-12-25'));

// Wrong format;
echo "Right: " . strtotime('2015-12-25') . "\n";

// Right format;
echo "Wrong: " . strtotime('01-20-2015') . "\n";

在这里可以看到; http://codepad.org/iudWZKnz