Get Start and End Days for a Given Week in PHP

前端 未结 16 1867
囚心锁ツ
囚心锁ツ 2020-12-01 03:49

I\'m trying to get the week range using Sunday as the start date, and a reference date, say $date, but I just can\'t seem to figure it out.

For example,

相关标签:
16条回答
  • 2020-12-01 04:24

    To be honest, I have trouble understanding the code you posted ;)

    I guess something like this should do the trick:

    function get_week($date) {
            $start = strtotime($date) - strftime('%w', $date) * 24 * 60 * 60;
            $end = $start + 6 * 24 * 60 * 60;
            return array('start' => strftime('%Y-%m-%d', $start),
                         'end' => strftime('%Y-%m-%d', $end));
    }
    
    0 讨论(0)
  • 2020-12-01 04:26

    I noticed that most of the answers here make use of strtotime/DateTime. While correct, personally I rather calculating dates without using English words.

    Here's a simple solution that makes use of mtkime :

    $now = time();
    $day_of_week = (int)date('w', $now);
    
    $week_start = mktime(0, 0, 0, date('n', $now), date('j', $now)-$day_of_week, date('Y', $now));
    $week_end = mktime(23, 59, 59, date('n', $week_start), date('j', $week_start)+6, date('Y', $week_start));
    
    0 讨论(0)
  • 2020-12-01 04:26

    from PHP DateTime doc :

    <?php
    $date = new DateTime();
    
    $date->setISODate(2008, 2);
    $startDay = $date->format('Y-m-d');
    
    $date->setISODate(2008, 2, 7);
    $endDay = $date->format('Y-m-d');
    ?>
    
    0 讨论(0)
  • 2020-12-01 04:28

    You can now use DateTime to get start/end dates of week(s)

    function getDateRangeForAllWeeks($start, $end){
        $fweek = getDateRangeForWeek($start);
        $lweek = getDateRangeForWeek($end);
        $week_dates = [];
        while($fweek['sunday']!=$lweek['sunday']){
            $week_dates [] = $fweek;
            $date = new DateTime($fweek['sunday']);
            $date->modify('next day');
    
            $fweek = getDateRangeForWeek($date->format("Y-m-d"));
        }
        $week_dates [] = $lweek;
    
        return $week_dates;
    }
    
    function getDateRangeForWeek($date){
        $dateTime = new DateTime($date);
        $monday = clone $dateTime->modify(('Sunday' == $dateTime->format('l')) ? 'Monday last week' : 'Monday this week');
        $sunday = clone $dateTime->modify('Sunday this week'); 
        return ['monday'=>$monday->format("Y-m-d"), 'sunday'=>$sunday->format("Y-m-d")];
    }
    

    Usage

    print_r( getDateRangeForWeek("2016-05-07") );
    
    print_r( getDateRangeForAllWeeks("2015-11-07", "2016-02-15") );
    
    0 讨论(0)
提交回复
热议问题