0

毎日のイベントの次のインスタンスまでの時間を取得するためによく使用しますが、間隔を短くするにはどうすればよいでしょうか?strtotime("next time")

分の単位の桁が 7 になるたびに何かが発生します ( 00:0700:1700:27など 10 分間隔で)

では、現在の時刻が与えられた場合、次の時刻を取得するにはどうすればよいでしょうか?

現在、私が思いつくことができる最善の方法は ですがstrtotime(substr(date("Y-m-d H:i"),0,-1)."7")、それはちょっと汚いようで、xx:x7 を過ぎて xx:x0 より前の時間でも機能しません。より良い方法はありますか?

4

3 に答える 3

0

の使用を後押しするDateTime:

<?php
$dt = new DateTime('2013-01-01 16:54:11');
for($qq = 0; $qq < 10; ++$qq) { // loop to test all minute remainders
    $dt->modify('+1 minute +3seconds'); // seconds just for show
    $min = +$dt->format('i'); // current minutes
    $sec = +$dt->format('s'); // current seconds
    $r10 = $min % 10;
    // if it's hh:27 now, this will result in hh:37, change >= to > if that forwarding is not needed
    if($r10 >= 7) {
        $deltaMin = 17 - $r10;
    } else {
        $deltaMin = 7 - $r10;
    }
    // time left until next "good" point in time
    $change = sprintf('%+d minutes -%d seconds', $deltaMin, $sec);
    $new = clone($dt);
    $new->modify($change);
    printf("%s\t %s\n%s\n--\n", $dt->format('r'), $change, $new->format('r'));
}
于 2013-01-01T15:58:29.327 に答える
0

あなたはもうすぐそこにいました:

$now = time() + (date('is')>5700?600:0);
$new = strtotime(substr(date("Y-m-d H:i", $now),0,-1)."7");
于 2013-01-01T16:15:15.567 に答える
0

オプションはDateTime::setTime()、少しの算術でメソッドを使用することです。

$date = new DateTime('12:34', new DateTimeZone('Europe/Paris'));

$minute = ceil(($date->format('i') - 7 + 1) / 10) * 10 + 7;
$date->setTime($date->format('G'), $minute, 0);

echo $date->format('H:i'); // 12:37

デモンストレーション目的で、ループで使用する例:

$date = new DateTime('16:00', new DateTimeZone('Europe/Paris'));
$period = new DatePeriod($date, new DateInterval('PT1M'), 60);
foreach ($period as $date) {
    echo $date->format('H:i => ');

    $minute = ceil(($date->format('i') - 7 + 1) / 10) * 10 + 7;
    $date->setTime($date->format('G'), $minute, 0);

    echo $date->format('H:i'), PHP_EOL;
}

上記の出力は次のようになります。

16:00 => 16:07
16:01 => 16:07
16:02 => 16:07
16:03 => 16:07
16:04 => 16:07
16:05 => 16:07
16:06 => 16:07
16:07 => 16:17
16:08 => 16:17
16:09 => 16:17
16:10 => 16:17
... removed to save scrolling ...
16:50 => 16:57
16:51 => 16:57
16:52 => 16:57
16:53 => 16:57
16:54 => 16:57
16:55 => 16:57
16:56 => 16:57
16:57 => 17:07
16:58 => 17:07
16:59 => 17:07
17:00 => 17:07

» オンラインで実行されているこの例を見る

于 2013-01-01T18:42:23.130 に答える