【问题标题】:php - adjusting for timezonesphp - 调整时区
【发布时间】:2011-04-22 04:23:57
【问题描述】:

好的,所以我有这段代码来制作日期列表:

$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,它仍应提供星期四作为选择)

【问题讨论】:

    标签: php datetime date time timezone


    【解决方案1】:

    我认为您目前正在混淆您的时区。美国东部时间晚上 8 点 = 午夜 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";
    }
    

    如果您在 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";
    }
    

    我认为应该可以。

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 2013-06-29
      • 2014-04-09
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多