запутанные манипуляции с датой - PullRequest
0 голосов
/ 14 сентября 2011

пытаясь пройти все воскресенья, как это:

/*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)

другими словами потерял час !? где?!

Ответы [ 3 ]

1 голос
/ 14 сентября 2011

Попробуйте 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 голос
/ 14 сентября 2011

Летнее время?

Попробуйте gmdate() вместо.

0 голосов
/ 14 сентября 2011

Я создал функцию для аналогичной проблемы .Может быть, вы найдете это полезным.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...