Search code examples
phplaraveldateeloquentdate-range

How to get date range of 7 days before and after of given date and populate in select - Laravel


I am trying to get date list of 7 dates before and after of a specific date in select field in laravel. For Example if a specific date is "2019-07-18", I want to populate date list from "2019-07-11" to "2019-07-25" in select field. Can anyone help me with code snippet for controller achieve this.


Solution

  • function getAgoDays($specDay, $days, $format = 'Y-m-d') {
        $d = date('d', strtotime($specDay)); 
        $m = date('m', strtotime($specDay)); 
        $y = date('Y', strtotime($specDay));
        $dateArray = array();
        for($i=1; $i<=$days; $i++) {
            $dateArray[] = '"' . date($format, mktime(0,0,0,$m,($d-$i),$y)) . '"'; 
        }
        return array_reverse($dateArray);
    }
    function getBeforeDays($specDay, $days, $format = 'Y-m-d') {
        $d = date('d', strtotime($specDay)); 
        $m = date('m', strtotime($specDay)); 
        $y = date('Y', strtotime($specDay));
        $dateArray = array();
        for($i=1; $i<=$days; $i++) {
            $dateArray[] = '"' . date($format, mktime(0,0,0,$m,($d+$i),$y)) . '"'; 
        }
        return $dateArray;
    }
    

    use

    $agoDays = getAgoDays('2019-07-18', 7, 'Y-m-d');
    echo '<pre>';
    print_r($agoDays);
    echo '</pre>';
    $agoDays = getBeforeDays('2019-07-18', 7, 'Y-m-d');
    echo '<pre>';
    print_r($agoDays);
    echo '</pre>';