2012-04-19 146 views
0

此函數返回兩個日期之間的日期數組。檢查兩個日期之間的日期錯誤,無知

現在,它的工作完全正常,除了一些未知的原因,如果我把它的11月份或3月份作爲參數,我得到的數組少一天。其他幾個月工作完全正常。我絕對無能爲力。

function getListofDatesInRange2($fromDate, $toDate) 
{ 
    $fromDate = str_replace("-","/", $fromDate); 
    $toDate = str_replace("-","/", $toDate); 

    $dateMonthYearArr = array(); 
    $fromDateTS = strtotime($fromDate); 
    $toDateTS = strtotime($toDate); 

    for ($currentDateTS = $fromDateTS; $currentDateTS <= $toDateTS; $currentDateTS += (60 * 60 * 24)) { 
     $currentDateStr = date("m-d-Y",$currentDateTS); 
     $dateMonthYearArr[] = $currentDateStr; 
    } 

return $dateMonthYearArr; 
} 

我重新編寫了它,while循環解決了我的問題。 (雖然我不知道這個問題是擺在首位)

function getListofDatesInRange2($fromDate, $toDate) 
{ 
$fromDate = str_replace("-","/", $fromDate); 
$toDate = str_replace("-","/", $toDate); 

$dateMonthYearArr = array(); 
$fromDateTS = strtotime($fromDate); 
$toDateTS = strtotime($toDate); 

array_push($dateMonthYearArr, date('m-d-Y', $fromDateTS)); 
while($fromDateTS < $toDateTS) { 
    $fromDateTS += 86400; 
    array_push($dateMonthYearArr, date('m-d-Y', $fromDateTS)); 
} 
return $dateMonthYearArr; 

}

+0

可能重複的[如何找到兩個指定日期之間的日期?](http://stackoverflow.com/questions/2736784/how-to-find-the-dates-between-two-specified-date) – Treffynnon 2012-04-19 21:44:00

回答

1

幾乎可以肯定,這是由一些傻瓜多年前誰決定這一天應該在一個月之間進去造成的,這一年,而不是一些邏輯排序(大多數計算中的大端,英國英語中的小端)。

取而代之的是,在將它們輸入strtotime之前,將輸入日期的格式爲YYYY-mm-dd。這將確保您始終獲得正確的日期。

爲了測試這的確是你的問題,請嘗試:

$fromDateTS = strtotime($fromDate); 
echo date("m-d-Y",$fromDateTS); 

確保所顯示的日期是一樣的,你投入的日期可能是,它不是。

+0

感謝有趣的答案,但不幸的是,測試失敗了。但是我重寫了它,現在它工作正常。如果你有興趣,請檢查一下。我編輯了我的問題 – volk 2012-04-19 21:57:38

相關問題