好的,所以我有这个代码,它列出了日期:
$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点改变。
解释一下,比如星期三。列表中的第一个选项应该是星期四。但是,一旦它是美国东部时间晚上8点,那么第一个选项是星期五。而不是在美国东部时间晚上8点改变我希望它在美国东部时间凌晨3点改变(因此在周四凌晨2点它仍然应该提供周四作为选择)
答案 0 :(得分:0)
我认为你现在正在混淆你的时区。美国东部时间晚上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";
}
如果你打开&lt;逻辑仍然是一样的。 5.3,只需要处理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";
}
我认为这应该有用。