php - 如何获取两个日期之间所有星期一的日期,但仅在 PHP 范围内获取整个星期的日期?
问题描述
示例:$startDate 是 2021 年 6 月 20 日星期日,$endDate 是 2021 年 7 月 7 日星期三。然后我希望它列出:
Monday 2021-06-21
Monday 2021-06-28
但不是星期一 2021-07-05,因为整个(星期一到星期日)周不在范围内。我想我需要在范围内找到最后一个星期日并将该日期用作 endDate。
解决方案
一种可能的方法:
function isMonday($date) {
return $date->format('N') === '1';
}
function isSunday($date) {
return $date->format('N') === '7';
}
function getMondays($start, $end) {
$mondays = [];
$datePeriod = new DatePeriod($start, new DateInterval('P1D'), $end);
foreach ($datePeriod as $date) {
if (isMonday($date)) $mondays[] = $date;
}
if (!isSunday($end)) array_pop($mondays);
return $mondays;
}
$startDate = new DateTime('2021-06-20');
$endDate = new DateTime('2021-07-07');
var_dump(getMondays($startDate, $endDate));
3v4l 演示。它相当直接:有一个DatePeriod Traversable 对象,从 $start 和 $end 日期创建,间隔为 1 天,用 foreach 迭代;每个星期一的日期都存储在一个数组中。如果 endDate 不是星期日,最后一步是丢弃该数组的最后一项。
推荐阅读
- mysql - 在 Sequelize 中动态定义数据库以支持多租户返回错误的查询语法
- virtualbox - 如何使 Hyper V Manager 客户端 GUI“拉伸显示”?VMware 工作站和 Virtualbox 执行此操作
- html - 使用 Sendgrid API 在 HTML 代码中发送电子邮件 ID
- ruby-on-rails - 创建rails应用程序时出错:当我运行命令“rails new blog”时,它会创建目录“new”而不是“blog”
- reactjs - 将未满足的期望放入 redux-saga-test 计划中
- sql-server - 如何将 SQL Server 架构流式导出到文件
- python - 有没有办法将参数传递给xml?还是修改它?
- python - 在 mac 上安装 pyaudio
- python - 图像过滤器为相似图像提供不同的结果
- java - struts 属性上的字符串中只有数字字符