0

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

3 回答 3

3

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

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

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

于 2014-06-27T12:30:48.630 回答
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'));
}

演示

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

于 2014-06-27T12:32:29.603 回答
0

尝试更换

$minutes += $quarter*15;

经过

$minutes += 15;
于 2014-06-27T12:31:13.827 回答