我遇到了其他人以前曾经处理过的代码问题
目标是遍历目录并将特定日期范围内的任何文件推送到数组(文件格式为mmddyyy.txt)。
代码中的(非常命名,而不是我自己做的)变量代表以下内容:
$ 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中保留此解决方案。
提前谢谢。
答案 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);
}
希望这有帮助!