2011-09-13 42 views
0

搭售要经过这样所有星期日:混乱日期操作

/*self::WEEK = 604800*/ 
/* 3600 * 24 * 7 looks like 7 days for me*/ 


    $start = 1286053200; 
    for ($i=0; $i < 10; $i++) { 
     echo date('d.m.Y H:i:s.u, D (z)', $start) . ' (' . $start . ')<br/>'; 
     $start += self::WEEK; 
    } 

,但在某些情况下,我看到这一点:

03.10.2010 00:00:00.000000, Sun (275) (1286053200) 
10.10.2010 00:00:00.000000, Sun (282) (1286658000) 
17.10.2010 00:00:00.000000, Sun (289) (1287262800) 
24.10.2010 00:00:00.000000, Sun (296) (1287867600) 
31.10.2010 00:00:00.000000, Sun (303) (1288472400) 
06.11.2010 23:00:00.000000, Sat (309) (1289077200) <-- 
13.11.2010 23:00:00.000000, Sat (316) (1289682000) 
20.11.2010 23:00:00.000000, Sat (323) (1290286800) 
27.11.2010 23:00:00.000000, Sat (330) (1290891600) 
04.12.2010 23:00:00.000000, Sat (337) (1291496400) 

换句话说,失去了一个小时!?哪里?!

回答

1

尝试的strtotime()

$start = 1286053200; 
for ($i=0; $i < 10; $i++) { 
    echo date('d.m.Y H:i:s.u, D (z)', strtotime(' +' . ($i * 7) . ' DAYS',$start)) . ' (' . $start . ')<br/>'; 
} 
+1

'strtotime(“+”。$ i。“week”,$ start);'看起来更好的$ - ) – Subdigger

+0

更新了SubDigger的建议。谢谢! – Charlie

1

Daylight saving?

尝试gmdate()代替。

+0

在女巫的方式我将使用gmdate?我如何解决我的问题? – Subdigger

+0

@Subdigger:'gmdate'适用于格林尼治标准时间,没有夏令时。 –

+0

更改为:'echo gmdate('d.m.Y H:i:s.u,D(z)',$ start + 3600 * 2)。 '('。$ start。')
';'没有帮助。你能举一个例子 – Subdigger

0

我创建了一个功能的similar problem。也许你会发现它很有用。

function getDays($year, $dayofweek, $format, $timezone='UTC') 
{ 
    $fridays = array(); 
    $startDate = new DateTime("{$year}-01-01 {$dayofweek}", new DateTimezone($timezone)); 
    $year++; 
    $endDate = new DateTime("{$year}-01-01", new DateTimezone($timezone)); 
    $int = new DateInterval('P7D'); 
    foreach(new DatePeriod($startDate, $int, $endDate) as $d) { 
     $fridays[] = $d->format($format); 
    } 

    return $fridays; 
} 

$sundays = getDays('2010', 'Sunday', 'd.m.Y H:i:s.u, D (z)', 'America/New_York'); 
var_dump($sundays);