繁体   English   中英

我正在尝试从 php 的月份中获取周末日期

[英]I am trying to get weekend dates from Months in php

我正在尝试从我选择的月份中获取所有周末日期,但不幸的是没有得到周末日期,请帮助我如何获得感谢。

在此处输入图像描述

$request->flexibles_months

[ "Dec", "Jan", "Feb"]

Controller

 public function listing(Request $request)
 {
       return  $months = explode(',', $request->flexibles_months);

         // return  $months = [ "Dec", "Jan", "Feb"]

        foreach ($months  as  $i =>$monthValue) {

            $weekend = new DatePeriod(
                new DateTime($monthValue),
                DateInterval::createFromDateString('+1 hour'),
                new DateTime('next Friday +2 days')
            );
        }
        foreach ($weekend as $hours) {
            $a =  $hours->format("Y-M-d");
        }
        return $a;  

        // $a = 2021-Dec-18

      

这可能会对您有所帮助,您可以将所有周末日期作为 UNIX 时间戳返回和数组。

使用简单的 HTML 表单

<form>
    <input name="start" type="date" />
    <input name="stop" type="date" />
    <input type="submit" value="Get Weekend" />
</form>

和我的 PHP 代码

<?php

if(empty($_GET['start']) || empty($_GET['stop']))
    die('no data');

$list = Weekendlisting(strtotime($_GET['start']), strtotime($_GET['stop']));

if($list === false)
    die('No weekend!');

foreach ($list as $day) {
    print(date('c = (l)', $day) . "<br />\n");
}


function Weekendlisting(int $start, int $stop) {
    $day_add = 86400;
    $return = [];

    if($start >= $stop)
        return false;
    
    do {
        $test = date('N', $start); //ISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)
        if($test >= 6)
            $return[] = $start;
        
        $start = $start + $day_add;
    } while ( $stop > $start - $day_add);
    return $return;
}
?>

我得到了结果:

2021-12-04T00:00:00+00:00 = (Saturday)
2021-12-05T00:00:00+00:00 = (Sunday)
2021-12-11T00:00:00+00:00 = (Saturday)
2021-12-12T00:00:00+00:00 = (Sunday)
2021-12-18T00:00:00+00:00 = (Saturday)
2021-12-19T00:00:00+00:00 = (Sunday)
2021-12-25T00:00:00+00:00 = (Saturday)
2021-12-26T00:00:00+00:00 = (Sunday)

首先你的 function 的第一行是一个返回语句,所以此时 function 返回到它被调用的地方。 无论如何都不会调用此行之后的代码中的任何内容。

接下来的事情是,我真的不明白你想要实现什么。 我会描述我猜你想要做什么。

您将输入几个月(这里是 12 月、1 月、2 月),结果应该是这几个月的所有周末日期,对吗? (每周六和周日)

以下代码可以稍微清理一下,但它可以工作。

// Apr and May included for the edge cases.
$months = array('Dec','Jan','Feb','Apr','May');

function weekends($mths){
    // so we only have future weekends need to know 'now'.
    $now = array('y'=>date('Y'),'m'=>date('m'));
    $wkends;
    $d;
    $m;
    $y;
    $maxDays;
    $saturday;
    $sunday;
    foreach($mths as $k => $v){
        // is the requested month in the past for this year?
        $m = date('m',strtotime($now['y'].'-'.$v.'-01'));
        // if so, request next year
        $y = ($m < $now['m']) ? ($now['y'] + 1) : $now['y'];
        // What day is the first of the month, 1 for Monday, 7 for Sunday
        $d = date('N',strtotime($y.'-'.$m.'-1'));
        $saturday = (7 - $d);
        $sunday = ($saturday + 1);
        // And just how many days in the month
        $maxDays = date('t',strtotime($y.'-'.$m.'-1'));
        do {
            // edge case when Sunday is 1st of month
            if ($saturday == 0){
                $wkends[$v][] = $y.'-'.$m.'-1 (Sun)';
            } else {
                $wkends[$v][] = $y.'-'.$m.'-'.$saturday.' (Sat)';
                if ($sunday <= $maxDays){
                    $wkends[$v][] = $y.'-'.$m.'-'.$sunday.' (Sun)';
                }
            }
            $saturday = ($saturday + 7);
            $sunday = ($sunday + 7);
        } while ($saturday <= $maxDays);
    }
}

$result = weekends($months);                                                                                                                                                                                                              
var_dump($results);

结果:

array(5) {
  ["Dec"]=> array(8) {
    [0]=> string(15) "2021-12-4 (Sat)"
    [1]=> string(15) "2021-12-5 (Sun)"
    [2]=> string(16) "2021-12-11 (Sat)"
    [3]=> string(16) "2021-12-12 (Sun)"
    [4]=> string(16) "2021-12-18 (Sat)"
    [5]=> string(16) "2021-12-19 (Sun)"
    [6]=> string(16) "2021-12-25 (Sat)"
    [7]=> string(16) "2021-12-26 (Sun)"
  }
  ["Jan"]=> array(10) {
    [0]=> string(15) "2022-01-1 (Sat)"
    [1]=> string(15) "2022-01-2 (Sun)"
    [2]=> string(15) "2022-01-8 (Sat)"
    [3]=> string(15) "2022-01-9 (Sun)"
    [4]=> string(16) "2022-01-15 (Sat)"
    [5]=> string(16) "2022-01-16 (Sun)"
    [6]=> string(16) "2022-01-22 (Sat)"
    [7]=> string(16) "2022-01-23 (Sun)"
    [8]=> string(16) "2022-01-29 (Sat)"
    [9]=> string(16) "2022-01-30 (Sun)"
  }
  ["Feb"]=> array(8) {
    [0]=> string(15) "2022-02-5 (Sat)"
    [1]=> string(15) "2022-02-6 (Sun)"
    [2]=> string(16) "2022-02-12 (Sat)"
    [3]=> string(16) "2022-02-13 (Sun)"
    [4]=> string(16) "2022-02-19 (Sat)"
    [5]=> string(16) "2022-02-20 (Sun)"
    [6]=> string(16) "2022-02-26 (Sat)"
    [7]=> string(16) "2022-02-27 (Sun)"
  }
  ["Apr"]=> array(9) {
    [0]=> string(15) "2022-04-2 (Sat)"
    [1]=> string(15) "2022-04-3 (Sun)"
    [2]=> string(15) "2022-04-9 (Sat)"
    [3]=> string(16) "2022-04-10 (Sun)"
    [4]=> string(16) "2022-04-16 (Sat)"
    [5]=> string(16) "2022-04-17 (Sun)"
    [6]=> string(16) "2022-04-23 (Sat)"
    [7]=> string(16) "2022-04-24 (Sun)"
    [8]=> string(16) "2022-04-30 (Sat)"
  }
  ["May"]=> array(9) {
    [0]=> string(15) "2022-05-1 (Sun)"
    [1]=> string(15) "2022-05-7 (Sat)"
    [2]=> string(15) "2022-05-8 (Sun)"
    [3]=> string(16) "2022-05-14 (Sat)"
    [4]=> string(16) "2022-05-15 (Sun)"
    [5]=> string(16) "2022-05-21 (Sat)"
    [6]=> string(16) "2022-05-22 (Sun)"
    [7]=> string(16) "2022-05-28 (Sat)"
    [8]=> string(16) "2022-05-29 (Sun)"
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM