【问题标题】:How to get the dates for all mondays between two dates but only for whole weeks within the range with PHP?如何获取两个日期之间所有星期一的日期,但仅在 PHP 范围内获取整个星期的日期?
【发布时间】:2021-07-04 12:49:05
【问题描述】:

示例:$startDate 是 2021 年 6 月 20 日星期日,$endDate 是 2021 年 7 月 7 日星期三。然后我希望它列出:

Monday 2021-06-21
Monday 2021-06-28

但不是 2021-07-05 星期一,因为整个(星期一到星期日)周不在范围内。我想我需要找到该范围内的最后一个星期日并将该日期用作 endDate。

【问题讨论】:

  • 你的意思不是不是星期一 2021-07-05
  • 当我读到这个问题时,我真的很困惑。

标签: php date


【解决方案1】:

一种可能的方法:

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 Demo。这是相当直接的:有一个DatePeriod Traversable 对象从 $start 和 $end 日期创建,间隔为 1 天,用 foreach 迭代;每个星期一的日期都存储在一个数组中。如果 endDate 不是星期日,最后一步是丢弃该数组的最后一项。

【讨论】:

    猜你喜欢
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 2011-10-27
    相关资源
    最近更新 更多