Получите предыдущие 8 кварталов за час, час назад - PullRequest
1 голос
/ 07 декабря 2011

Что я хочу сделать, так это отобразить последние 8 кварталов за час, час назад.

У меня уже есть это:

<?php
    echo date('d-m-Y H:i:s', strtotime('-1 hour'));
?>

Например:
Сейчас 14:46 (2:46 вечера), так что я хочу, это:

13: 45
13: 30
13: 15
13: 00
12: 45
12: 30
12: 15
12:00

Как я могу получить это?

Ответы [ 4 ]

2 голосов
/ 07 декабря 2011
<?php
$hour = date('G',(time()-(60*60)));
if (date('i') < 15)
    $min = array('00','45','30','15');
elseif (date('i') < 30)
    $min = array('15','00','45','30');
elseif (date('i') < 45)
    $min = array('30','15','00','45');
else
    $min = array('45','30','15','00');
for ($i=0;$i<=8;$i++) {
    if ($min[$i%4] == 45) {
        if ($hour == 0)
            $hour = 23;
        else 
            $hour--;
    }
    echo $hour.':'.$min[$i%4];
    echo '<br />';
}

Работает сейчас, но я больше не тестировал.

Местное время: 15: 06

Выход:

14:00
13:45
13:30
13:15
13:00
12:45
12:30
12:15
12:00
1 голос
/ 07 декабря 2011

Я полагаю, что для того, чтобы делать то, что вам нужно, не нужно много кода:

$t = time() - 60 * 60;
$t -= $t % (60 * 15);

for ($i = 0; $i < 8; $i++, $t -= (60 * 15)) {
  echo date('H:i', $t), "\n";
}
1 голос
/ 07 декабря 2011

Или другой способ сделать это, просто то, что я быстро собрал:

function quarters($date) 
{
    $date = new DateTime($date);
    $date->modify("-1 hour");
    $quarters = array()
    for($i = 0; $i<=7; $i++)
    {
        $nearestQuarter =  floor($date->format("i") / 15) * 15;
        if($i == 0)
        {
            $minuteDiff  = (int) $nearestQuarter - $date->format("i");
            $date->modify(sprintf("%s minutes",$minuteDiff));
        }
        else
        {
            $date->modify("-15 minutes");
        }
        $quarters[] = $date->format("H:i"); 
    }
    return $quarters;
}
var_dump(quarters("2011-12-07 14:46:00"));

Выход:

array(8) {
  [0]=>
  string(5) "13:45"
  [1]=>
  string(5) "13:30"
  [2]=>
  string(5) "13:15"
  [3]=>
  string(5) "13:00"
  [4]=>
  string(5) "12:45"
  [5]=>
  string(5) "12:30"
  [6]=>
  string(5) "12:15"
  [7]=>
  string(5) "12:00"
}
1 голос
/ 07 декабря 2011

Чтобы решить эту проблему, вам нужно выяснить, когда был последний квартал.Тогда это так же просто, как вернуться оттуда.Вот как я бы это сделал:

$minute = idate('i');
$qdiff = $minute % 15;
$lastQuarter = time() - $qdiff*60;
echo date('Y-m-d H:i', $lastQuarter);

Попробуйте выяснить, что делает мой код.Узнайте, как использовать оператор по модулю , поскольку он очень полезен для большого числа числовых задач!

...