![](/img/trans.png)
[英]How to check given date period is between two dates in MySQL and PHP
[英](PHP) Verifying if given date is between two other dates
我遇到了其他人以前曾從事過的某些代碼的問題。
目標是遍歷目錄並將特定日期范圍內的所有文件推送到數組(文件為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中。
先感謝您。
在我看來,月報表if($ aMonth> = $ sMonth1 && $ aMonth <= $ sMonth2)需要工作,例如開始日期-2013年8月3日結束日期-2016年9月4日,檢查日期說2013年11月8日將使isGood = false,而應該是真的。
刪除&& $ aDay <= $ sDay2和&& $ aMonth <= $ sMonth2應該可以。
正如@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);
}
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.