【问题标题】:Finding next 13 Mondays and the last Monday查找接下来的 13 个星期一和最后一个星期一
【发布时间】:2015-04-17 08:59:29
【问题描述】:

我有以下代码返回从今天开始的接下来的 13 个星期一。

for($i=1; $i<=13; $i++){
    echo date("Y-m-d", strtotime('+'.$i.' Monday'))."<br>";
}

我希望能够对此进行修改,使其不仅显示接下来的 13 个星期一,而且显示刚刚过去的星期一。

我尝试按如下方式修改代码,但随后返回了下周一的两个实例。

for($i=-1; $i<=13; $i++){
echo date("Y-m-d", strtotime('+'.$i.' Monday'))."<br>";
}

数据返回。

2015-04-13
2015-04-20  //<--
2015-04-20
2015-04-27
2015-05-04
2015-05-11
2015-05-18
2015-05-25
2015-06-01
2015-06-08
2015-06-15
2015-06-22
2015-06-29
2015-07-06
2015-07-13

关于我如何实现这一目标的任何想法?

【问题讨论】:

  • 您可以在循环内添加一个条件来忽略$i=0; 的情况。类似if($i == 0) continue;
  • 如果今天是星期一呢?
  • @chumkiu: 如果今天是星期一,+0 星期一可以工作 :)
  • @Marc 如果他想要 +0 Monday 做的事情,它可以工作 :-)

标签: php date datetime


【解决方案1】:

我会这样做:

for($i =- 1; $i <= 13; $i == 0 ? $i += 2 : $i++){
    echo date("Y-m-d", strtotime("$i Monday")) . "<br>";
}

使用三元运算符检查 $i 是否为 0 - 如果将其增加 2 而不是 1 :)

【讨论】:

    【解决方案2】:

    试试这个:

    echo date("Y-m-d", strtotime('-1 Monday'))."<br>";
    for($i=1; $i<=13; $i++){
        echo date("Y-m-d", strtotime('+'.$i.' Monday'))."<br>";
    }
    

    或者您只需要一个for 声明?

    【讨论】:

      【解决方案3】:
      function mondays() {
          $begin = new DateTime('last monday');
          $end = clone $begin;
          $end->add(new DateInterval('P14W')); // next 13 + last
      
          $interval = new DateInterval('P1W');
          $daterange = new DatePeriod($begin, $interval ,$end);
      
          foreach($daterange as $date){
              yield $date;
          }
      }
      
      
      foreach(mondays() as $date){
          echo $date->format("Y-m-d"), PHP_EOL;
      }
      

      【讨论】:

      • 看来你喜欢发电机 :)
      • 我也喜欢使用 DateTime 和相关对象 :) 让生活更轻松
      【解决方案4】:

      你可以用这个:

      for($i=-1; $i<=13; $i++){
          if($i !== 0){
              echo date("Y-m-d", strtotime('+'.$i.' Monday'))."<br>";        
          }
      }
      

      您只需省略 $i 为零的情况。

      【讨论】:

        【解决方案5】:

        这应该有效(您也可以在其他日子进行测试!= 今天)

        //In order to avoid problems with midnight and daylight saving time
        $refTime = date("Y-m-d 12:00:00");
        
        for($i=-1; $i<13; $i++){
            echo date("Y-m-d", strtotime("$refTime this Monday +".$i*7 ." days"))."<br>";
        }
        

        【讨论】:

          【解决方案6】:

          我的方法如下(使用 DateTime 类)

          $monday = new DateTime('last monday'); //if today is monday this will return last week's
          $oneWeek = new DateInterval('P1W');
          for($i=0; $i<=13; $i++){
              echo $monday->format('Y-m-d')."<br>";
              $monday->add($oneWeek);
          }
          

          【讨论】:

          • 联赛球员确认
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-28
          • 1970-01-01
          • 2013-11-03
          • 1970-01-01
          相关资源
          最近更新 更多