首页 > 解决方案 > 如何仅列出一个月中添加和删除特定数据的日期?

问题描述

我需要每天生成一个列表:给定月份的星期一、星期二和星期三,但是,添加一个列表 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 日

注意:我已经对论坛进行了广泛的研究。没有一个问题考虑添加和删除日期的这种特殊性。

先感谢您!

标签: php

解决方案


假设您有以下变量:

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

推荐阅读