2009-10-28 40 views
3

我想要得到一個日期數組加上接下來的13個日期,以獲得從給定日期開始的14天計劃。PHP:從接下來的13天開始?

這裏是我的功能:

$time = strtotime($s_row['schedule_start_date']); // 20091030 
$day = 60*60*24; 
for($i = 0; $i<14; $i++) 
{ 
    $the_time = $time+($day*$i); 
    $date = date('Y-m-d',$the_time); 
    array_push($dates,$date); 
} 

但似乎月份時切換到可重複的日期..

這就是我得到:

2009-10 -30 | 2009-10-31 | 2009-11-01 | 2009-11-01 | 2009-11-02 | 2009-11-03 | 2009-11-04 | 2009-11-05 | 2009-11-06 | 2009-11-07 | 2009-11-08 | 2009-11-09 | 2009-11-10 | 2009-11-11

請注意,2009-11-01重複。我無法弄清楚爲什麼?

我在做什麼錯?

謝謝!

回答

6

我會使用的strtotime

$start = strtotime($s_row['schedule_start_date']); 
$dates=array(); 
for($i = 1; $i<=14; $i++) 
{ 
    array_push($dates,date('Y-m-d', strtotime("+$i day", $start))); 
} 
print_r($dates); 
+2

擊敗我23秒!!!!!!!!! – 2009-10-28 18:19:46

7

由於daylight saving time switch,你有相同的日期。第二天加24*60*60秒是不安全的,因爲一年中的2天有更多/更少的秒數。當您從夏季切換到冬季時,您將增加1小時到一天。所以這一天將是25*60*60秒,這就是爲什麼它沒有在你的代碼中切換。

您可以通過mktime()來計算。例如:

## calculate seconds from epoch start for tomorrow 
$tomorrow_epoch = mktime(0, 0, 0, date("m"), date("d")+1, date("Y")); 
## format result in the way you need 
$tomorrow_date = date("M-d-Y", $tomorrow_epoch); 

或完整版本代碼:

$dates = array(); 
$now_year = date("Y"); 
$now_month = date("m"); 
$now_day = date("d"); 
for($i = 0; $i < 14; $i++) { 
    $next_day_epoch = mktime(0, 0, 0, $now_month, $now_day + $i, $now_year); 
    array_push(
     $dates, 
     date("Y-m-d", $next_day_epoch) 
    ); 
} 
+0

因爲這使得,那我應該怎麼做呢?謝謝。 – 2009-10-28 18:15:16

4

我建議是這樣的:

for($i=1;$i<=14;$i++){ 
    echo("$i day(s) away: ".date("m/d/Y",strtotime("+$i days"))); 
}