簡體   English   中英

(PHP)驗證給定日期是否在其他兩個日期之間

[英](PHP) Verifying if given date is between two other dates

我遇到了其他人以前曾從事過的某些代碼的問題。
目標是遍歷目錄並將特定日期范圍內的所有文件推送到數組(文件為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中。

先感謝您。

在我看來,月報表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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM