(PHP)验证给定日期是否在两个其他日期之间

时间:2017-01-03 20:00:12

标签: php date

我遇到了其他人以前曾经处理过的代码问题 目标是遍历目录并将特定日期范围内的任何文件推送到数组(文件格式为mmddyyy.txt)。
代码中的(非常命名,而不是我自己做的)变量代表以下内容:

  • $ aYear - 给定年份,从文本文件中读入。该变量在循环的每次迭代期间都会发生变化。 $ aMonth和$ aDay也是如此。
  • $ sYear1 - 开始一年。 $ sMonth1和$ sDay1用于$ sYear1。
  • $ sYear2 - 结束一年。 $ sMonth2和$ sDay2用于$ sYear2。
  • $ isGood - 文件将被添加到数组中。

    $isGood = false;
            if($aYear >= $sYear1 && $aYear <= $sYear2)
            {
                if($aYear == $sYear1)
                {
                    if($aMonth == $sMonth1)
                    {
                        if($aDay >= $sDay1 && $aDay <= $sDay2)
                        {
                            $isGood = true;
                        }
                    }
                    else
                    {
                        if($aMonth >= $sMonth1 && $aMonth <= $sMonth2)
                        {
                            $isGood = true;
                        }
                    }
                }
                else if($aYear == $sYear2)
                {
                    if($aMonth == $sMonth2)
                    {
                        if($aDay <= $sDay2)
                        {
                            $isGood = true;
                        }
                    }
                    else
                    {
                        if($aMonth <= $sMonth2)
                        {
                            $isGood = true;
                        }
                    }
                }
                else
                {
                    $isGood = true;
                }
            }
    
            if($isGood)
            {
                //echo "Found good article";
                $a = $a . "===" . $file;
                array_push($result, $a);
            }  
    

我没有得到我预期的结果。我正在寻找一些帮助,以便我如何简化此代码并使其正常工作。我确实需要在PHP中保留此解决方案。

提前谢谢。

2 个答案:

答案 0 :(得分:1)

在我看来,如果($ aMonth&gt; = $ sMonth1&amp;&amp; $ aMonth&lt; = $ sMonth2)需要工作 例如,开始日期 - 2013年8月3日结束日期 - 2016年9月4日,检查日期为2013年11月8日 会使isGood = false,而它应该是真的。

删除&amp;&amp; $ aDay&lt; = $ sDay2 &amp;&amp; $ aMonth&lt; = $ sMonth2 应该有效。

答案 1 :(得分:0)

正如@Sandeep指出你的问题在于:

if ($aMonth >= $sMonth1 && $aMonth <= $sMonth2)

if ($aDay >= $sDay1 && $aDay <= $sDay2)

因为您不需要将日期与结束日期进行比较。

话虽如此,您可以通过执行以下操作完全清理代码:

$date = (new DateTime)->setDate($aYear, $aMonth, $aDay);
$start = (new DateTime)->setDate($sYear1, $sMonth1, $sDay1);
$end = (new DateTime)->setDate($sYear2, $sMonth2, $sDay2);

if ($start <= $date && $date <= $end) {
    //echo "Found good article";
    $a = $a . "===" . $file;
    array_push($result, $a);
}

希望这有帮助!