减少 DateInterval 不产生结果
Decreasing DateInterval not producing result
尝试获取最后四个星期日,从最近的星期日开始循环递减。
// most recent sunday
$mostRecentSunday = new DateTime('last sunday');
// four Sundays ago
$maxDateAttempt = clone $mostRecentSunday;
$maxDateAttempt->modify('-4 weeks');
// interval of one week (same as 7 days or "P7D")
$dateInterval = new DateInterval('P1W');
// isn't this supposedly supposed to switch the increasing interval to decreasing?
$dateInterval->invert = 1;
$dateRange = new DatePeriod($mostRecentSunday, $dateInterval, $maxDateAttempt);
foreach ($dateRange as $day) {
echo $day->format('F j, Y');
}
采用 @hijarian's answer in this similar question, I thought setting the invert property would solve this, but I cannot get it to work. Then this comment in the PHP docs 声称 DatePeriod class 甚至与负间隔不兼容。有人对这个问题有一些了解吗?也许 PHP 文档可以在此处进行一些改进。
PHP 文档中的评论仅部分正确。到目前为止,我阅读和试验过的所有内容似乎都表明 DatePeriod 在使用结束日期 时不适用于负 DateIntervals 。也许在执行任何操作之前会先检查最小值是否小于最大值,但我真的不确定为什么它不起作用。
但是,如果您使用重复 constructor 而不是设置结束日期,它 确实 有效。
$dateRange = new DatePeriod($mostRecentSunday, $dateInterval, 3);
// using 3 rather than 4 because the initial value is one occurrence
但是您必须像这样创建 DateInterval
:
$dateInterval = DateInterval::createFromDateString('-1 week');
有趣的是,这不会创建 invert=1 的 7 天间隔。如果你 var_dump($dateInterval)
,你会看到 public 'd' => int -7
和 public 'invert' => int 0
。
但从技术上讲,您不需要 DateInterval 或 DatePeriod 来完成此操作。
for ($i=0, $date = new DateTime; $i < 4; $i++) {
echo $date->modify('last sunday')->format('F j, Y');
}
尝试获取最后四个星期日,从最近的星期日开始循环递减。
// most recent sunday
$mostRecentSunday = new DateTime('last sunday');
// four Sundays ago
$maxDateAttempt = clone $mostRecentSunday;
$maxDateAttempt->modify('-4 weeks');
// interval of one week (same as 7 days or "P7D")
$dateInterval = new DateInterval('P1W');
// isn't this supposedly supposed to switch the increasing interval to decreasing?
$dateInterval->invert = 1;
$dateRange = new DatePeriod($mostRecentSunday, $dateInterval, $maxDateAttempt);
foreach ($dateRange as $day) {
echo $day->format('F j, Y');
}
采用 @hijarian's answer in this similar question, I thought setting the invert property would solve this, but I cannot get it to work. Then this comment in the PHP docs 声称 DatePeriod class 甚至与负间隔不兼容。有人对这个问题有一些了解吗?也许 PHP 文档可以在此处进行一些改进。
PHP 文档中的评论仅部分正确。到目前为止,我阅读和试验过的所有内容似乎都表明 DatePeriod 在使用结束日期 时不适用于负 DateIntervals 。也许在执行任何操作之前会先检查最小值是否小于最大值,但我真的不确定为什么它不起作用。
但是,如果您使用重复 constructor 而不是设置结束日期,它 确实 有效。
$dateRange = new DatePeriod($mostRecentSunday, $dateInterval, 3);
// using 3 rather than 4 because the initial value is one occurrence
但是您必须像这样创建 DateInterval
:
$dateInterval = DateInterval::createFromDateString('-1 week');
有趣的是,这不会创建 invert=1 的 7 天间隔。如果你 var_dump($dateInterval)
,你会看到 public 'd' => int -7
和 public 'invert' => int 0
。
但从技术上讲,您不需要 DateInterval 或 DatePeriod 来完成此操作。
for ($i=0, $date = new DateTime; $i < 4; $i++) {
echo $date->modify('last sunday')->format('F j, Y');
}