【问题标题】:Find week days date from range of the two dates从两个日期的范围内查找工作日日期
【发布时间】:2013-05-02 16:15:25
【问题描述】:
$start_date = "2013-05-01";
$last_date = "2013-08-30";

如何获取这两个日期之间的星期二和星期四的日期?

【问题讨论】:

    标签: php date


    【解决方案1】:

    如果您有一个您知道是星期二/星期四的参考日期,您可以找到从参考日期算起 7 天的倍数的天数,这些天数将始终是一周中的同一天。

    【讨论】:

    • 我需要一个代码 (PHP) 来查找这两个日期之间的所有星期二和星期四的日期。
    【解决方案2】:

    试试这个

    $startDate = strtotime($start_date);
    $endDate = strtotime($last_date);
    while ($startDate < $endDate) {
        echo date('Y-m-d', $startDate ). "\n";
        // Give the condition to find last Tuesday
        $startDate = strtotime( 'next Tuesday', $startDate );
    }
    

    【讨论】:

      【解决方案3】:
      <?php
      $start    = new DateTime('2013-05-01');
      $end      = new DateTime('2013-08-30');
      $interval = DateInterval::createFromDateString('1 day');
      $period   = new DatePeriod($start, $interval, $end);
      
      foreach ($period as $dt) {
          if ($dt->format("N") == 2 || $dt->format("N") == 4) {
              echo $dt->format("l Y-m-d") . "<br>\n";
          }
      }
      

      See it in action

      这段代码的作用:

      1. 使用DateTime 创建一个开始日期对象。
      2. 使用 DateTime 创建一个开始日期对象。
      3. 创建一个DateInterval 对象来表示我们要迭代的时间间隔。在这种情况下需要 1 天。
      4. 创建一个DatePeriod 对象来管理这些对象。
      5. 使用 DatePeriod,它遍历从开始日期开始到结束日期结束的日期。我们使用DateTime::format()N 参数来获取星期几。如果星期几是2(星期二)或4(星期四),则回显它的值。

      【讨论】:

      • 我更新了链接并添加了解释以使其成为更好的答案
      【解决方案4】:

      &lt;?php echo date('Y-m-d', strtotime('next thursday', strtotime($start_date)));

      当然也适用于周二

      【讨论】:

        【解决方案5】:
        $start_date = strtotime("2013-05-01");
        $last_date = strtotime("2013-08-30");
        while ($start_date <= $last_date) {
            $start_date = strtotime('+1 day', $start_date);
            if (date('N',$start_date) == 2 || date('N',$start_date) == 4){
                echo date('Y-m-d', $start_date).PHP_EOL;
            }
        }
        

        【讨论】:

        【解决方案6】:

        请使用以下函数为您的解决方案,

         function daycount($day, $startdate, $lastdate, $counter=0)
            {
                if($startdate >= $lastdate)
                {
                    return $counter;
                }
                else
                {
                    return daycount($day, strtotime("next ".$day, $startdate), ++$counter);
                }
            }
        
        $start_date = "2013-05-01";
        $last_date = "2013-08-30";
        
        echo "Tuesday Count - ".daycount("tuesday", strtotime($start_date), strtotime($last_date));
        echo "<br/>";
        echo "Thursday Count - ".daycount("thursday", strtotime($start_date), strtotime($last_date));
        

        【讨论】:

          【解决方案7】:

          一些 PHP-Fu

          $start_date = '2013-05-01';
          $last_date = '2013-08-30';
          
          $dates = range(strtotime($start_date), strtotime($last_date),86400);
          $days = array('tuesday' => array(), 'thursday' => array());
          
          array_map(function($v)use(&$days){
                  if(date('D', $v) == 'Tue'){
                      $days['tuesday'][] = date('Y-m-d', $v);
                  }elseif(date('D', $v) == 'Thu'){
                      $days['thursday'][] = date('Y-m-d', $v);
                  }
              }, $dates); // Requires PHP 5.3+
          
          print_r($days);
          

          输出

          Array
          (
              [tuesday] => Array
                  (
                      [0] => 2013-05-07
                      [1] => 2013-05-14
                      [2] => 2013-05-21
                      [3] => 2013-05-28
                      [4] => 2013-06-04
                      [5] => 2013-06-11
                      [6] => 2013-06-18
                      [7] => 2013-06-25
                      [8] => 2013-07-02
                      [9] => 2013-07-09
                      [10] => 2013-07-16
                      [11] => 2013-07-23
                      [12] => 2013-07-30
                      [13] => 2013-08-06
                      [14] => 2013-08-13
                      [15] => 2013-08-20
                      [16] => 2013-08-27
                  )
          
              [thursday] => Array
                  (
                      [0] => 2013-05-02
                      [1] => 2013-05-09
                      [2] => 2013-05-16
                      [3] => 2013-05-23
                      [4] => 2013-05-30
                      [5] => 2013-06-06
                      [6] => 2013-06-13
                      [7] => 2013-06-20
                      [8] => 2013-06-27
                      [9] => 2013-07-04
                      [10] => 2013-07-11
                      [11] => 2013-07-18
                      [12] => 2013-07-25
                      [13] => 2013-08-01
                      [14] => 2013-08-08
                      [15] => 2013-08-15
                      [16] => 2013-08-22
                      [17] => 2013-08-29
                  )
          
          )
          

          Online demo

          【讨论】:

            【解决方案8】:

            DateTime:

            $start_date = "2013-05-01";
            $last_date = "2013-08-30";
            
            $start = new DateTime($start_date);
            $clone = clone $start;
            
            $start->modify('next thursday');
            $thursday=$start->format('Y-m-d');
            
            $clone->modify('next tuesday');
            $tuesday=$clone->format('Y-m-d');
            
            echo $thursday; //2013-05-02
            echo $tuesday; //2013-05-07
            

            我们需要对象,因为如果在间隔内tuesdaythursday 之前,我们将有下一个tuesday。但是你可以修改一点代码来使用一个对象。

            【讨论】:

              【解决方案9】:

              借助几个 php 日期函数,这可以轻松解决。

              <?php
              
              // Create the from and to date
              $start_date = strtotime("2013-05-01");
              $last_date  = strtotime("2013-08-30");
              
              // Get the time interval to get the tue and Thurs days
              $no_of_days = ($last_date - $start_date) / 86400; //the diff will be in timestamp hence dividing by timestamp for one day = 86400
              $get_tue_thu_days = array();
              
              // Loop upto the $no_of_days
              for($i = 0; $i < $no_of_days; $i++) {
                  $temp = date("D", $start_date);
                  if($temp == "Tue" || $temp == "Thu") {
                    $get_tue_thu_days[] = date("D/M/Y", $start_date); //formating date in Thu/May/2013 formate.
                  }
                  $start_date += 86400;
              }
              
              print_r($get_tue_thu_days);
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-10-05
                • 2013-03-04
                • 1970-01-01
                • 1970-01-01
                • 2021-08-15
                • 2013-09-09
                相关资源
                最近更新 更多