php - корректировка часовых поясов - PullRequest
1 голос
/ 07 октября 2010

Хорошо, у меня есть этот код, который составляет список дат:

$dates = array();
                for($i = 1; $i < 10; $i++)
                {
                    $datetime = mktime(12, 0, 0, date('n'), date('j') + $i, date('Y'));
                    if(date('N', $datetime) != 6 && date('N', $datetime) != 7)
                    {
                        $dates[date('l, F jS', $datetime)] = date('l, F jS', $datetime);
                    }
                }

Даты завтра и продолжаются, если они не суббота или воскресенье.

Теперь проблема в том, что «завтра» меняется примерно в 8:00 вечера по восточному поясному времени.

Чтобы объяснить, скажем, что среда. Первым вариантом в списке должен быть четверг. Тем не менее, если это 8:00 вечера по восточному поясному времени, то первый вариант - пятница. Вместо того, чтобы менять в 8:00 вечера по восточному поясному времени, я бы хотел, чтобы оно изменилось в 3:00 утра по восточному поясному времени (поэтому в четверг @ 2:00 по-прежнему должно быть выбрано четверг)

1 Ответ

0 голосов
/ 07 октября 2010

Я думаю, что вы путаете ваши часовые пояса в настоящее время. 8 вечера EDT = полночь UTC.

В любом случае, в PHP 5.3:

$one_day = new DateInterval('P1D');
$tz = new DateTimeZone('America/New_York');
$start = new DateTime('now', $tz);

if ($start->format('G') >= 3)
  $start->add($one_day);

foreach (new DatePeriod($start, $one_day, 10) as $date)
{
  if ($date->format('N') < 6)
    echo $date->format('l, F jS')."\n";
}

Логика остается прежней, если вы используете <5.3, просто нужно что-то делать с другими функциями, такими как <code>strtotime(), date() и т. Д .:

$one_day = 86400;
date_default_timezone_set('America/New_York');
$start = time();

if (date('G', $start) >= 3)
  $start += $one_day;

for ($i = 0, $date = $start; $i < 10; ++$i, $date += $one_day)
{
  if (date('N', $date) < 6)
    echo date('l, F jS', $date)."\n";
}

Я думаю, это должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...