php - 如何仅列出一个月中添加和删除特定数据的日期?
问题描述
我需要每天生成一个列表:给定月份的星期一、星期二和星期三,但是,添加一个列表 SOME SATURDAYS 使用并排除其他一些日期(即使它们是星期一、星期二和星期三)。数字需要按时间顺序出现。
要使用的变量包括:
$year = 2020; // year to be considered
$mes = 7; // month to be considered
$days_of_week = array ("Monday", "Tuesday", "Wednesday"); // days to be considered
$dias_serao_excluidos = array ("07/06/2020", "03/12/2020", "07/13/2020", "07/23/2020", "07/06/2018"); // will only be used 06/07/2020, 07/13/2020 - DATE FORMAT DAY / MONTH / YEAR
$dias_serao_adicionados = array ("7/1/2020", "7/2/2020", "6/3/2020", "4/23/2020", "5/6/2018"); // will only be used 7/1/2020, 7/2/2020 - DATE FORMAT DAY / MONTH / YEAR
预期的输出看起来像这样:
7 月
1 日、02 日、07 日、8 日、14 日、15 日、20 日、21 日、22 日、27 日、28 日、29 日
注意:我已经对论坛进行了广泛的研究。没有一个问题考虑添加和删除日期的这种特殊性。
先感谢您!
解决方案
假设您有以下变量:
$excludedDates = ["07/06/2020", "03/12/2020", "07/13/2020", "07/23/2020", "07/06/2018"];
$includedDates = ["7/1/2020", "7/2/2020", "6/3/2020", "4/23/2020", "5/6/2018"];
$whiteDays = ["Monday", "Tuesday", "Wednesday"];
$year = 2020;
$month = 7;
首先让我们创建DatePeriod,其中包含所选月份的所有日期:
$from = new DateTimeImmutable("$year-$month");
$to = $from->modify('last day of this month');
$datePeriod = new DatePeriod($from, DateInterval::createFromDateString('1 day'), $to);
然后将迭代器转换为数组:
$dates = iterator_to_array($datePeriod);
现在您可以使用所需的值过滤数组:
$filtered = array_filter($dates, function (DateTimeImmutable $day) use ($includedDates, $excludedDates, $whiteDays) {
if (in_array($day->format('n/j/Y'), $includedDates)) {
return true;
}
if (in_array($day->format('m/d/Y'), $excludedDates)) {
return false;
}
if (in_array($day->format('l'), $whiteDays)) {
return true;
}
});
var_dump($filtered);