【问题标题】:Count for next non-weekend (Sat, Sun) day given a startdate and a number of days给定开始日期和天数,计算下一个非周末(周六、周日)
【发布时间】:2012-10-15 07:22:25
【问题描述】:

所以,我有这个功能:

function calculateNextDate($startDate, $days)
{
    $dateTime = new DateTime($startDate);

        while($days) {
            $dateTime->add(new DateInterval('P1D'));    

            if ($dateTime->format('N') < 6) {
                $days--;
            }
        }

    return $dateTime->format('Y-m-d');
}

如果我这样运行我的函数:

echo calculateNextDate('2012-10-01', '10');

这将导致:

2012-10-15

这是正确的,但是我希望它把$startDate 算作一个计数日,所以它会这样计数:

1. 2012-10-01
2. 2012-10-02
3. 2012-10-03
4. 2012-10-04
5. 2012-10-05
6. 2012-10-08
7. 2012-10-09
8. 2012-10-10
9. 2012-10-11
10. 2012-10-12

有可能吗?

【问题讨论】:

    标签: php function date count


    【解决方案1】:

    先减去一天

    function calculateNextDate($startDate, $days)
    {
      $oneDay = new DateInterval('P1D');
      $dateTime = new DateTime($startDate);
      $dateTime->sub($oneDay);
    
      while($days) {
        $dateTime->add($oneDay);
        if ($dateTime->format('N') < 6) {
          $days--;
        }
      }
    
      return $dateTime->format('Y-m-d');
    }
    
    echo calculateNextDate('2012-10-01', 10);
    // results in 2012-10-12
    

    【讨论】:

      【解决方案2】:
      <?
      function calculateNextDate($startDate, $days)
      {
          $dateTime = new DateTime($startDate);
              while($days > 0) {
                  $weekend = date('w', strtotime($dateTime->format('Y-m-d')));
                  if($weekend != '6' && $weekend != '0'){
                      $new_date[] = $dateTime->format('Y-m-d');
                      $days--;
                  }
                  $dateTime->add(new DateInterval('P1D'));    
              }
          return $new_date;
      }
      
      echo "<pre>";
      print_r(calculateNextDate('2012-10-11', '10'));
      ?>
      

      结果是:

      Array
      (
          [0] => 2012-10-11
          [1] => 2012-10-12
          [2] => 2012-10-15
          [3] => 2012-10-16
          [4] => 2012-10-17
          [5] => 2012-10-18
          [6] => 2012-10-19
          [7] => 2012-10-22
          [8] => 2012-10-23
          [9] => 2012-10-24
      )
      

      您可以通过循环数组来回显日期。

      【讨论】:

        【解决方案3】:

        嗯,很复杂的方法来添加开始日期的天数

        我会这样做

        $resultingDate = date('Y-m-d', strtotime("+$days days", $startDate));
        

        【讨论】:

        • 我忘了说它会跳过周末。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多