显示日期时出错 2011 年 3 月


Error on displaying the date On March 2011

$startDay = "2011-03-31"; 
for($i=0; $i<6; $i++)
{
  $startDaysArr[] = date("Y-m-d", strtotime($startDay) - 3600*24*$i);
}
$startDaysArr = array_reverse($startDaysArr, FALSE);

2011-03-27 时钟向 Duo 移动一小时,因此在运行上述代码后$startDay = "2011-03-31 00:00:00"时输出不正确。

从下面的结果可以看出,缺少 2011-03-27。有人可以帮助我吗?非常感谢您的帮助。

-----输出时

$startDaysArr = "2011-03-31 00:00:00"----

Array                           //Correct One:
(
    [25] => 2011-03-25          // 2011-03-26
    [26] => 2011-03-26          // 2011-03-27 
    [27] => 2011-03-28          // 2011-03-28 
    [28] => 2011-03-29          // 2011-03-29 
    [29] => 2011-03-30          // 2011-03-30 
    [30] => 2011-03-31          // 2011-03-31 
)

从中午而不是午夜开始工作:

$startDay = "2011-03-31";
$currDay = $startDay;
for($i = 0; $i < 6; $i++) {
    $startDaysArr[] = $currDay;
    $currDay = date ("Y-m-d", strtotime ($currDay . " 11:59") - 3600 * 24 * $i);
}

这样,一个小时左右的变化将没有任何影响。事实上,您只存储日期部分,并将其与 11:59 的时间结合使用,这意味着减去 24 小时应该是安全的(没有累积错误(。

几乎与我今天已经回答的另一个问题相同:

$startDaysArr = array();
$startDate = new DateTime("2011-03-31",new DateTimeZone("Europe/London"));
for($i=0; $i<6; $i++)
{
   $startDaysArr[] = $startDate->format("Y-m-d");
   $startDate->modify("-1 day");
}
$startDaysArr = array_reverse($startDaysArr, FALSE);

是的,这是因为时钟在变化,所以不要依赖减去x天的分钟数,而是使用"DST安全"dateTime对象并进入"现代"(而不是过去十年(PHP的世界

当小时偏移量是一个大问题时,为什么不为日期添加安全时间?

$startDay = "2011-03-31 7:00";

函数 strtotime 期望得到一个包含美国英语日期格式的字符串,并将尝试将该格式解析为 Unix 时间戳。

为什么不只使用 strtotime 函数?更改此行:

$startDaysArr[] = date("Y-m-d", strtotime("$startDay -$i day"));