首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >降低DateInterval不产生效果

降低DateInterval不产生效果
EN

Stack Overflow用户
提问于 2018-02-16 19:27:20
回答 1查看 291关注 0票数 3

试着得到最后的四个星期日,从最近的周日开始循环递减。

代码语言:javascript
运行
复制
// 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在这个类似问题中的回答为例,我认为设置invert属性可以解决这个问题,但我无法让它工作。然后PHP文档中的这个注释声称DatePeriod类甚至与负间隔不兼容。有谁对这个问题有明确的看法吗?也许PHP文档在这里需要一些改进。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-16 19:37:57

PHP文档中的注释仅部分正确。到目前为止,我阅读和实验过的所有内容似乎都表明,在使用结束日期时,DatePeriod不适用于负DateIntervals。也许在做任何事情之前,都会对最小值小于最大值进行一些初步检查,但我真的不知道为什么它不起作用。

但是,如果使用递归构造函数而不是设置结束日期,则确实有效。

代码语言:javascript
运行
复制
$dateRange = new DatePeriod($mostRecentSunday, $dateInterval, 3);
// using 3 rather than 4 because the initial value is one occurrence

但是你必须像这样创建你的DateInterval

代码语言:javascript
运行
复制
$dateInterval = DateInterval::createFromDateString('-1 week');

有趣的是,这不会给invert=1创造7天的间隔,如果您var_dump($dateInterval),您将看到public 'd' => int -7public 'invert' => int 0

但从技术上讲,您不需要DateInterval或DatePeriod来完成这一任务。

代码语言:javascript
运行
复制
for ($i=0, $date = new DateTime; $i < 4; $i++) {
    echo $date->modify('last sunday')->format('F j, Y');
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48833589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档