【问题标题】:How to exclude weekends between two date ranges如何排除两个日期范围之间的周末
【发布时间】:2019-01-04 09:45:17
【问题描述】:

我有一个 FromDate 和 ToDate 以及它们之间的天数。 现在我想获取除周末以外的所有日期

如果我的 FromDate 和 ToDate 之间有任何周末,那么这个日期将在周六和周日增加 2 天。

在下面的示例中,我计算了 2018 年 7 月 27 日和 2018 年 8 月 27 日之间的所有日期,它们之间的间隔为 5 天,

public function testdate(){
            $date_from = new \DateTime("7/27/2018");
            $date_to = new \DateTime("8/27/2018");
            $interval = new \DateInterval("P5D");
            $dates = new \DatePeriod($date_from, $interval, $date_to);
            $out = array();
            if (!empty($dates)) {
                foreach($dates as $dt) {
                    $out[] = array(
                        'month_year' => $dt->format('d/m/Y')
                    );
                }
            }  
            '<pre>';
            //$out = array_reverse($out);
            echo print_r($out); 
            '</pre>'; 
            exit;           
        }

预期输出

Array
(
    [0] => Array
        (
            [month_year] => 27/07/2018
        )

    [1] => Array
        (
            [month_year] => 02/08/2018
        )

    [2] => Array
        (
            [month_year] => 08/08/2018
        )

    [3] => Array
        (
            [month_year] => 14/08/2018
        )

    [4] => Array
        (
            [month_year] => 20/08/2018
        )

    [5] => Array
        (
            [month_year] => 27/08/2018
        )

)

在上面的示例中,在 20/08/2018 之后,下一个日期将是 26/08/2018 但 26/08/2018 是星期日,因此我们将这个星期日排除 1 天,下一个日期是现在 2018 年 8 月 27 日。

如果在计算周六和周日之间的间隔后出现任何日期,则将本周末跳过 1 或 2 天。

【问题讨论】:

  • 为什么要标记 cakephp ?一种解决方案可能是计算开始和结束之间的所有日期,然后测试日期是星期日还是星期六,并在这种情况下将其删除
  • 因为我正在使用 cakephp 3.x...是的,你对 bt 如何做到这一点..我不知道..
  • 我更新了我的代码..我尝试了什么

标签: php arrays date datetime dateinterval


【解决方案1】:
$year = date('Y');
$month = date('n');

$weekend_days = array_filter($allDays[$year][$month], function($d) {
    return (date('N', strtotime(date("Y-m-$d"))) >= 6);
});

$allDays[$year][$month] = array_diff($allDays[$year][$month], $weekend_days);

print_r($allDays);

【讨论】:

  • 你的输出是 Array ([2018] => Array ([7] =>)) ..我需要按照我的预期输出所有时间
  • foreach(new DatePeriod($date_from, $interval, $date_to->add($oneday)) as $day) { $day_num = $day->format("N"); /* 'N' 天数 1 (mon) 到 7 (sun) / if($day_num weekday */ $days[$day->format("Ymd")] = $数据; } }
  • 不,它不能像我预期的输出那样工作..请尝试做出完整的答案..否则请查看我的代码以供参考
猜你喜欢
  • 2016-03-20
  • 1970-01-01
  • 2014-01-14
  • 2011-03-22
  • 2013-03-01
  • 2023-02-08
  • 2018-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多