$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"));