我的日期检查声明无法正常工作

时间:2016-05-30 19:47:37

标签: php date

我有一个日期检查程序,用于检查日期是否在其他两个日期之间,但是它无法正常工作。

$maxDate = date('d/m/Y');
$minDate = date('d/m/Y', strtotime("-30 days"));
$date = $unit['date_recorded'];

var_dump($date)返回:

string(19) "2016-05-02 15:27:15"

现在我有声明:

if ($date >= $minDate AND $date <= $maxDate) { // do something }

但它永远不会触发此声明,即使我尝试使用$date转换date("d/m/Y", $date)或使用strtotime()上的$date或所有变量。

我做错了什么?

3 个答案:

答案 0 :(得分:2)

问题#1

两个日期必须具有相同的格式才能进行比较。

问题#2

  

如果我尝试使用date("d/m/Y", $date)

转换$ date

它不起作用的原因是因为date函数接受时间而不是字符串。

要使其有效,您必须

date("d/m/Y", strtotime($date))

然而,这只是一个问题。您无法将日期与d/m/Y进行比较的原因是:

$minDate = date('d/m/Y', strtotime("-30 days")); // 30/04/2016
$maxDate = date('d/m/Y'); // 30/05/2016
$date = date('d/m/Y', strtotime($unit['date_recorded'])); // 02/05/2016

如您所见,$date 02 开头,小于$minDate 30 。它在一年或一个月之前考虑了这一天。因此,它永远不会进入你的案件。

解决方案#1 - 将所有日期转换为Y-m-d格式

为测试目的声明$unit['date_recorded']的值:

$unit['date_recorded'] = "2016-05-02 15:27:15";

现在我们有了一个单位变量的值,这是我们如何进行的:

$minDate = date('Y-m-d', strtotime("-30 days"));
$maxDate = date('Y-m-d');
$date = $unit['date_recorded'];

if($date >= $minDate && $date <= $maxDate)
    echo "Do something...";

解决方案#2 - 将所有日期转换为unix时间戳

$minDate = strtotime("-30 days");
$maxDate = time();
$date = strtotime($unit['date_recorded']);

if($date >= $minDate && $date <= $maxDate)
    echo "Do something...";

答案 1 :(得分:0)

迟到的答案,但在这里:

$date = new DateTime("2016-05-02 15:27:15");
$maxDate = new DateTime();
$minDate = new DateTime($maxDate->format());
$minDate->modify('-30 day');
if ($date >= $minDate and $date <= $maxDate)
{ 
 //... 
}

答案 2 :(得分:-1)

您可能在if子句中遇到优先级问题。

尝试添加更多括号: if(($ date&gt; = $ minDate)&amp;&amp;($ date&lt; = $ maxDate)){...

并检查是否有效。