每15分钟创建日期+次数不起作用

时间:2014-06-27 12:27:22

标签: php date date-math

下面我的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

3 个答案:

答案 0 :(得分:3)

要使代码生效,您需要$minutes为0,然后是15,然后是30,然后是45 ......

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

尝试使用$minutes = $quarter * 15;代替+=

答案 1 :(得分:3)

这是一种比您当前的解决方案更清晰的替代方法,可以避免像您一样的潜在日期数学问题:

$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完成的。

答案 2 :(得分:0)

尝试替换

$minutes += $quarter*15;

通过

$minutes += 15;