Get Start and End Days for a Given Week in PHP

前端 未结 16 1882
囚心锁ツ
囚心锁ツ 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:21

    Base on @jjwdesign's answer, I developed a function that can calculate the beginning and ending of a week for a specific date using the DateTime class. WILL WORK ON PHP 5.3.0++

    The difference is you can set the day you want as the "beginning" between 0 (monday) and 6 (sunday).

    Here's the function :

    if(function_exists('grk_Week_Range') === FALSE){
        function grk_Week_Range($DateString, $FirstDay=6){
            #   Valeur par défaut si vide
            if(empty($DateString) === TRUE){
                $DateString = date('Y-m-d');
            }
    
            #   On va aller chercher le premier jour de la semaine qu'on veut
            $Days = array(
                0 => 'monday',
                1 => 'tuesday',
                2 => 'wednesday',
                3 => 'thursday',
                4 => 'friday',
                5 => 'saturday',
                6 => 'sunday'
            );
    
            #   On va définir pour de bon le premier jour de la semaine     
            $DT_Min = new DateTime('last '.(isset($Days[$FirstDay]) === TRUE ? $Days[$FirstDay] : $Days[6]).' '.$DateString);
            $DT_Max = clone($DT_Min);
    
            #   On renvoie les données
            return array(
                $DT_Min->format('Y-m-d'),
                $DT_Max->modify('+6 days')->format('Y-m-d')
            );
        }
    }
    

    Results :

    print_r(grk_Week_Range('2013-08-11 16:45:32', 0));
    print_r(grk_Week_Range('2013-08-11 16:45:32', 1));
    print_r(grk_Week_Range('2013-08-11 16:45:32', 2));
    print_r(grk_Week_Range('2013-08-11 16:45:32', 3));
    print_r(grk_Week_Range('2013-08-11 16:45:32', 4));
    print_r(grk_Week_Range('2013-08-11 16:45:32', 5));
    print_r(grk_Week_Range('2013-08-11 16:45:32', 6));
    
    Array
    (
        [0] => 2013-07-29
        [1] => 2013-08-04
    )
    Array
    (
        [0] => 2013-07-30
        [1] => 2013-08-05
    )
    Array
    (
        [0] => 2013-07-31
        [1] => 2013-08-06
    )
    Array
    (
        [0] => 2013-07-25
        [1] => 2013-07-31
    )
    Array
    (
        [0] => 2013-07-26
        [1] => 2013-08-01
    )
    Array
    (
        [0] => 2013-07-27
        [1] => 2013-08-02
    )
    Array
    (
        [0] => 2013-07-28
        [1] => 2013-08-03
    )
    

提交回复
热议问题