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

コードを機能させるには、0、15、30、45 の順にする必要があります$minutes

しかし、インクリメントしているため、$minutes0 に設定され、次に 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 に答える