【问题标题】:How to get date range of 7 days before and after of given date and populate in select - Laravel如何获取给定日期前后 7 天的日期范围并填充到选择中 - Laravel
【发布时间】:2019-11-26 22:25:24
【问题描述】:

我试图在 laravel 的选择字段中获取特定日期之前和之后的 7 个日期的日期列表。 例如,如果特定日期是“2019-07-18”,我想在选择字段中填充从“2019-07-11”到“2019-07-25”的日期列表。 任何人都可以用代码 sn-p 来帮助我实现这一点。

【问题讨论】:

    标签: php laravel date eloquent date-range


    【解决方案1】:
    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;
    }
    

    使用

    $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>';
    

    【讨论】:

    • 感谢@Giang,我能够使用您的代码获得所需的结果。
    【解决方案2】:

    你可以使用carbon period:

    $givenDate = "2019-07-18";
    $dateMinusOneWeek = Carbon::parse($givenDate)->subWeek()->format('Y-m-d');
    $datePlusOneWeek = Carbon::parse($givenDate)->addWeek()->format('Y-m-d');
    
    $period = CarbonPeriod::create(dateMinusOneWeek , datePlusOneWeek);
    
    //You can iterate over the period
    foreach ($period as $date) {
        echo $date->format('Y-m-d');
    }
    
    //Or convert the period to an array of dates
    $dates = $period->toArray();
    

    希望对你有帮助。

    【讨论】:

    • 嗨@Mateus,我收到此错误:异常 DateTime::__construct(): Failed to parse time string (dateMinusOneWeek) at position 0 (d): The timezone could not be found in the database
    • @Mysticalsam,参考this question
    猜你喜欢
    • 1970-01-01
    • 2020-06-11
    • 2019-03-20
    • 2020-10-05
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    相关资源
    最近更新 更多