如何采取动态星期一

时间:2016-09-23 06:31:31

标签: php

嘿伙计们,

$start_date = '2015-09-21';
$end_Date = '2016-09-21';



    function getStartAndEndDate($start_date, $end_Date ){
        $date1 = new DateTime($start_date);
        $date2 = new DateTime($end_Date);
        $interval = $date1->diff($date2);


        $weeks = floor(($interval->days) / 7);
        $date_differences = array();
        for($i = 1; $i <= $weeks; $i++){    
            $date1->add(new DateInterval('P4D'));
            $s_time = strtotime($start_date);
            $week_number = date('W', $s_time); 
            $date_differences[] = $start_date." - ".$date1->format('Y-m-d')."<br>";
            $date1->add(new DateInterval('P3D'));
            $start_date = $date1->format('Y-m-d');
            }

            return $date_differences;
        }

该功能的输出是:

    [0] => 2015-09-1 @@ 2015-09-05
    [1] => 2015-09-08 @@ 2015-09-12
    [2] => 2015-09-15 @@ 2015-09-19
    [3] => 2015-09-22 @@ 2015-09-26
    [4] => 2015-09-29 @@ 2015-10-03
    [5] => 2015-10-06 @@ 2015-10-10
    [6] => 2015-10-13 @@ 2015-10-17
    [7] => 2015-10-20 @@ 2015-10-24
    [8] => 2015-10-27 @@ 2015-10-31
    [9] => 2015-11-03 @@ 2015-11-07

在这个函数中,当我给出开始和结束日期时,它会返回我所有周的开始和结束日期,但是当我给他的开始日期恰好是星期一时,问题就完美了。当我给它一个日期不是星期一但是其他几天它只是增加了四天并且做了一周(星期二到星期六)。 我真正想要的是,如果某人输入的日期不是星期一,那么它应该从星期一开始。例如如果

$start_date = '2015-09-21';
$end_Date = '2016-09-21';

它返回如下输出:

[0] => 2015-08-31 @@ 2015-09-04
[1] => 2015-09-07 @@ 2015-09-11
[2] => 2015-09-14 @@ 2015-09-18
[3] => 2015-09-21 @@ 2015-09-25

2 个答案:

答案 0 :(得分:0)

确定日期在哪一天并使用DateTime计算星期一:

$s = new DateTime('2016-09-23');
$s->modify('-' . $s->format('N')+1 . 'days');
//2016-09-19
echo $s->format('Y-m-d');

答案 1 :(得分:-1)

$date = new DateTime('your date');

$date->modify('-' . $date->format('N')+1 . 'days');

并打印您想要格式的日期:)