【问题标题】:Function recursive to get a day that don't be sunday or saturday函数递归以获得不是星期天或星期六的一天
【发布时间】:2021-06-17 08:58:27
【问题描述】:

我的函数有问题,它的作用是,查看日期是否在星期六或星期日,如果是,则添加一天,直到日期不是星期六而不是星期日,它应该返回正确的日期. 例如,我输入日期 2021-03-20,它返回 2021-03-21 的日期,而 2021-03-22 应该返回。 我不知道这里发生了什么我离开了我的功能:

enter code here

private function isWeekend($date) {
    // Convert string to time
    // Get day name from the date
    $dt2 = date("l", strtotime($date));
    // Convert day name to lower case
    $dt3 = strtolower($dt2);
    $date_ = $date;
    // Check if day name is "saturday" or "sunday"
        if(($dt3 == "saturday" ) || ($dt3 == "sunday")) {
            // If the date is weekend then
            $date_ = date('Y-m-d', strtotime($date."+ 1 days"));
            $this->isWeekend($date_);
        }
    return $date_;
}

【问题讨论】:

    标签: php function date recursion weekend


    【解决方案1】:

    您没有捕获递归调用的值。试试这个:

    return $this->isWeekend($date_);
    

    $date_ = $this->isWeekend($date_);
    

    【讨论】:

      【解决方案2】:

      不需要循环或递归来确定不是星期六或星期日的日子。为此,我们使用相对表达“下一个工作日”。

      使用 strtotime 的老派解决方案:

      $date = '2021-03-20';
      $dateIsWeekday = date('Y-m-d',strtotime('next weekday',strtotime('-1 day',strtotime($date))));
      // "2021-03-22"
      

      使用 strtotime 的解决方案既棘手又令人困惑。使用 DateTime 类更好。

      $date = '2021-03-20';
      
      $dateTime = date_create($date)
        ->modify('-1 Day')
        ->modify('next weekday')
      ;
      $dateIsWeekday = $dateTime->format('Y-m-d');
      // "2021-03-22"
      

      【讨论】:

        猜你喜欢
        • 2019-10-19
        • 2021-07-05
        • 2023-04-11
        • 2021-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-28
        相关资源
        最近更新 更多