2016-09-04 55 views
0

代碼中使用如何顯示特定月份

$date_from1 = new DateTime('1-9-2016'); 
$date_from=$date_from1->format('Y-m-d'); 
$date_to1 = new DateTime('30-9-2016'); 
$date_to=$date_to1->format('Y-m-d'); 
$diff1=$date_from1->diff($date_to1); 
$diff2= $diff1->format('%R %a days'); 
preg_match_all('!\d+!', $diff2, $matches); //use that to get only number from diff2 
for($i=0; $i <= $matches[0][0]; $i++) //$matches return diff2 only number of days 
{ 
    $this_date=$date_from1->add(new DateInterval('P1D')); 
    echo $this_date->format('Y-m-d') . "<br/>"; 
} 

我的輸出

2016年9月2日2016年9月3日2016年9月4日2016年9月5日的所有日期2016-09-06 2016-09-07 2016-09-08 2016-09-09 2016-09-10 2016-09-11 2016-09-12 2016-09-13 2016-09-14 2016-09 -15 2016-09-16 2016-09-17 2016-09-18 2016-09-19 2016-09-20 2016-09-21 2016-09-22 2016-09-23 2016-09-24 2016- 09-25 2016-09-26 2016-09-27 2016-09-28 2016-09-29 2016-09-30 2016-10 -01

預期輸出

2016年9月1日2016年9月2日2016年9月3日2016年9月4日2016年9月5日2016年9月6日 2016-09 -07 2016-09-08 2016-09-09 2016-09-10 2016-09-11 2016-09-12 2016-09-13 2016-09-14 2016-09-15 2016-09-16 2016- 09-17 2016-09-18 2016-09-19 2016-09-20 2016-09-21 2016-09-22 2016-09-23 2016-09-24 2016-09-25 2016-09-26 2016-09-27 2016-09-28 2016-09-29 2016-09-30 我不能用cal_days_in_month as I有一個日期範圍,必須計算所選日期之間的天數。

回答

0

你真的很接近。你只需要改變你的循環,這樣$this_date等於$date_from1第一次迭代。

變化:

$this_date=$date_from1->add(new DateInterval('P1D')); 

要:

$this_date= $i? $date_from1->add(new DateInterval('P1D')): $date_from1; 

旁註:因爲您創建具有相同的值多次new DateInterval你的代碼是一種浪費。您將提高您的工作效率,如果你循環之前曾經創建日期間隔:

$interval = new DateInterval('P1D'); 

,然後只用在循環的每次迭代:

$this_date= $i? $date_from1->add($interval): $date_from1; 

Live demo

+0

$ this_date = $一世? $ date_from1-> add($ interval):$ date_from1;沒有工作得到一個錯誤:在非對象上調用成員函數格式() – nkh

+0

@nkh我在答案的底部添加了一個鏈接,以顯示我的代碼正在運行。您剛剛提到的錯誤不是由我的更改引起的。我在解決方案的任何地方都不使用'format()'函數。它來自代碼中的其他地方。 – BeetleJuice

+0

我已經使用了你給出的代碼仍然沒有工作給我一個錯誤調用成員函數格式()在非對象 – nkh