2015-03-31 26 views
-2

我無法將結果插入到數組中。將開始日期和結束日期之間的所有日期寫入數組

這是我的代碼:

$listData2=""; 

$end = date("n/d/Y",strtotime($row['dDate'])); 
$start = date("n/d/Y",strtotime($row['aDate'])); 

$datediff = strtotime($end) - strtotime($start); 
$datediff = floor($datediff/(60*60*24)); 

for($i = 0; $i <=- $datediff + 1; $i++) { 
    $dateArr=date("n/d/Y", strtotime($start . ' + ' . $i . 'day')); 
    $listData2[]=$dateArr; 
} 
+0

FYI:您可以接受如何幫助您最,解決你的問題的答案! (http://meta.stackexchange.com/q/5234)如果有這樣的答案,您可以爲您所有的問題做到這一點 – Rizier123 2015-03-31 02:02:22

+0

也請考慮閱讀本文爲您的下一個問題(或改善您當前的問題): http://stackoverflow.com/help/how-to-ask,http://stackoverflow.com/help/mcve – Rizier123 2015-03-31 02:05:01

回答

1

你有一個令人費解的方式,這樣做,所以我要去只是告訴你如何得到所有兩個日期之間的日期到一個數組:

$listData2 = []; 
$start  = new DateTime($row['dDate']); 
$end  = (new DateTime($row['aDate']))->modify('+1 day'); 
$interval = DateInterval::createFromDateString('1 day'); 
$period = new DatePeriod($start, $interval, $end); 

foreach ($period as $dt) { 
    $listData2[] = $dt->format("n/d/Y"); 
} 

Demo

這初始化一個空數組存儲日期(你開始與一個空字符串,不是數組)和創建的起始日期和結束DA te作爲DateTime對象(而不是您創建的非標準字符串。然後它創建一個代表1天的DateInterval對象和一個DatePeriod對象,以包裝所有的東西供我們使用。然後我們遍歷DatePeriod對象並將它們添加到數組中。

(您的for循環中也有一個無效的操作符(<=-))。

+0

有沒有辦法,我的代碼在數組中?我不明白,你使用的編碼... – 2015-03-31 01:58:23

+0

這段代碼確實把它放入一個數組中。你讀過整個答案了嗎? – 2015-03-31 01:58:51

+0

我添加了一個演示,以便您可以看到它的工作。希望這對你有幫助。 – 2015-03-31 02:03:54

0

這裏是一個示例代碼:

$listData2 = array(); 
$end = date("n/d/Y",strtotime($row['dDate'])); 
$start = date("n/d/Y",strtotime($row['aDate'])); 
for(;;) { 
    $listData2[]=date("n/d/Y", strtotime($start)); 
    $start = date("Y-m-d", strtotime("+1 day", strtotime($start))); 
    if(strtotime($start)>strtotime($end)) break; 
} 
+0

您對strtotime()的濫用有點嚇人 – 2015-03-31 13:59:55

相關問題