Get all Work Days in a Week for a given date

后端 未结 5 1751
萌比男神i
萌比男神i 2020-12-06 14:58

So I have one date as a string:

2011/06/01

I need to get the 5 DateTime objects from it that correspond to the five weekdays (Monday to Fri

5条回答
  •  我在风中等你
    2020-12-06 15:28

    Can use DatePeriod:

    $firstMondayThisWeek= new DateTime('2011/06/01');
    $firstMondayThisWeek->modify('tomorrow');
    $firstMondayThisWeek->modify('last Monday');
    
    $nextFiveWeekDays = new DatePeriod(
        $firstMondayThisWeek,
        DateInterval::createFromDateString('+1 weekdays'),
        4
    );
    
    print_r(iterator_to_array($nextFiveWeekDays));
    

    Note that DatePeriod is an Iterator, so unless you are really fixed on having the dates in an array, you can just as well go with the DatePeriod as container.

    The above will give something like (demo)

     Array
    (
    [0] => DateTime Object
        (
            [date] => 2011-05-30 00:00:00
            [timezone_type] => 3
            [timezone] => Europe/Berlin
        )
    
    [1] => DateTime Object
        (
            [date] => 2011-05-31 00:00:00
            [timezone_type] => 3
            [timezone] => Europe/Berlin
        )
    
    [2] => DateTime Object
        (
            [date] => 2011-06-01 00:00:00
            [timezone_type] => 3
            [timezone] => Europe/Berlin
        )
    
    [3] => DateTime Object
        (
            [date] => 2011-06-02 00:00:00
            [timezone_type] => 3
            [timezone] => Europe/Berlin
        )
    
    [4] => DateTime Object
        (
            [date] => 2011-06-03 00:00:00
            [timezone_type] => 3
            [timezone] => Europe/Berlin
        )
    )
    

    One pre-5.3 solution to do that would be

    $firstMondayInWeek = strtotime('last Monday', strtotime('2011/06/01 +1 day'));
    $nextFiveWeekDays = array();
    for ($days = 1; $days <= 5; $days++) {
        $nextFiveWeekDays[] = new DateTime(
            date('Y-m-d', strtotime("+$days weekdays", $firstMondayInWeek))
        );
    }
    

    though I really dont see why you would want to use DateTime objects for this when you dont/cannot also use their API in your project. As you can see, this is all the old date functions with DateTime just being the container.

提交回复
热议问题