【问题标题】:creating dates+times every 15 minutes does not work每 15 分钟创建日期+时间不起作用
【发布时间】:2014-06-27 12:27:22
【问题描述】:

我下面的 php 代码应该创建一个以下日期+时间的列表。

// your code goes here
$maxdays = 1;
for($daynumber=0;$daynumber<$maxdays;$daynumber++){
    $currentdayval = "+".(string)($daynumber-$maxdays)." days";
    $minutes=0;
    for($quarter=0;$quarter<24*4;$quarter++){
        $minutes += $quarter*15;
        $currentminutesval = $minutes." minutes";
        $date_sql = date("Y-m-d H:i:s",strtotime($currentdayval." + ".$currentminutesval)); //current date
        echo $date_sql. "\n";
    }//for $quarter

}//for $daynr

但下面的输出显示并非每个日期/时间都在前一个日期/时间之后 15 分钟之后。不知道我的代码哪里出错了(?)

2014-06-26 12:44:15
2014-06-26 12:59:15
2014-06-26 13:29:15
2014-06-26 14:14:15
2014-06-26 15:14:15
2014-06-26 16:29:15
2014-06-26 17:59:15
2014-06-26 19:44:15
2014-06-26 21:44:15
2014-06-26 23:59:15
2014-06-27 02:29:15
2014-06-27 05:14:15
2014-06-27 08:14:15
2014-06-27 11:29:15

【问题讨论】:

    标签: php date date-math


    【解决方案1】:

    要使您的代码正常工作,您需要 $minutes 为 0,然后是 15,然后是 30,然后是 45...

    但是因为您在递增,所以您将 $minutes 设置为 0,然后是 15...,然后是 45 (15+30),然后是 90 (15+30+45),然后是 150 (15+30+45) +60)...

    尝试$minutes = $quarter * 15; 而不是+=

    【讨论】:

      【解决方案2】:

      这是一种替代方法,它比您当前的解决方案更简洁,并且可以避免您遇到的潜在日期数学问题:

      $start    = new DateTime();
      $finish   = new DateTime("+{maxdays} days");
      $interval = new DateInterval('PT15M');
      $period   = new DatePeriod($start, $interval, $finish);
      foreach ($period as $date) {
          printf("%s\n<br>", $date->format('Y-m-d H:i:s'));
      }
      

      Demo

      它会创建您的开始和结束日期/时间以及 15 分钟的间隔。然后它使用 DatePeriod 循环遍历它们并为您输出日期和时间。所有的日期数学都是由 PHP 为您完成的。

      【讨论】:

      • +1 - 我最近“发现”了这些功能,我还没有将它们用于任何用途,但它们看起来确实不错。
      • 对于这种情况,它们非常方便。不过,对于新用户来说,学习曲线可能有点高。
      • 这段代码比topicstarter的更易懂
      【解决方案3】:

      尝试替换

      $minutes += $quarter*15;
      

      $minutes += 15;
      

      【讨论】:

        猜你喜欢
        • 2017-08-26
        • 1970-01-01
        • 2016-08-18
        • 2017-08-03
        • 1970-01-01
        • 2014-12-07
        • 2013-01-28
        • 2020-03-22
        • 1970-01-01
        相关资源
        最近更新 更多