Округлите минуту в меньшую сторону до ближайшего часа четверти

Проверьте, существует ли каталог pod в /var/lib/kubelet

Вы используете очень старую версию Kubernetes, обновление решит эту проблему.

45
задан eykanal 22 March 2013 в 03:06
поделиться

6 ответов

Ваша полная функция будет примерно такой ...

function roundToQuarterHour($timestring) {
    $minutes = date('i', strtotime($timestring));
    return $minutes - ($minutes % 15);
}
29
ответ дан 26 November 2019 в 20:55
поделиться

В то время как является обычно самым уместным использовать основанные на дате и времени функции для управления датой и временем, требование этой задачи не включает специальной связанной со временем обработки - это - простая задача выполнения вычисления на определенной подстроке и использования математического результата для замены подстроки.

Не все - поклонник regex, но он действительно обеспечивает однофункциональную технику для видоизменения входной строки.

Код: ( Демонстрация )

$timeString = "2010-03-18 10:50:57";
// PHP7.4+ arrow syntax
echo preg_replace_callback(
        '~:\K(\d{2}).*~',
        fn($m) => $m[1] - $m[1] % 15 . ':00',
        $timeString
     );

echo "\n---\n";
// below PHP7.3
echo preg_replace_callback(
        '~:\K(\d{2}).*~',
        function($m) {return $m[1] - $m[1] % 15 . ':00';},
        $timeString
     );

Вывод:

2010-03-18 10:45:00
---
2010-03-18 10:45:00

Примечание, этот regex шаблон будет работать точно также при контакте с (разграниченной двоеточием) строкой только для времени. ( Демонстрация )

-2
ответ дан 26 November 2019 в 20:55
поделиться
$now = getdate();
$minutes = $now['minutes'] - $now['minutes']%15;

 //Can add this to go to the nearest 15min interval (up or down)
  $rmin  = $now['minutes']%15;
  if ($rmin > 7){
    $minutes = $now['minutes'] + (15-$rmin);
   }else{
      $minutes = $now['minutes'] - $rmin;
  }

$rounded = $now['hours'].":".$minutes;
echo $rounded;
{{1} }
11
ответ дан 26 November 2019 в 20:55
поделиться
$seconds = time();
$rounded_seconds = round($seconds / (15 * 60)) * (15 * 60);

echo "Original: " . date('H:i', $seconds) . "\n";
echo "Rounded: " . date('H:i', $rounded_seconds) . "\n";

В этом примере получается текущее время, округляется до ближайшего квартала и печатается как исходное, так и округленное время.

PS : если вы хотите округлить его вниз , замените round () на floor () .

67
ответ дан 26 November 2019 в 20:55
поделиться
$minutes = ($minutes - ($minutes % 15));
5
ответ дан 26 November 2019 в 20:55
поделиться

В последнее время мне нравится решать проблемы методом TDD / модульного тестирования . В последнее время я больше не занимаюсь программированием на PHP, но это то, что я придумал. Честно говоря, я действительно просмотрел здесь примеры кода и выбрал тот, который, как мне показалось, уже был правильным. Затем я хотел проверить это с помощью модульного тестирования, используя тесты, которые вы предоставили выше.

class TimeTest

require_once 'PHPUnit/Framework.php';
require_once 'Time.php';

class TimeTest extends PHPUnit_Framework_TestCase 
{
    protected $time;

    protected function setUp() {
        $this->time = new Time(10, 50);
    }

    public function testConstructingTime() {
        $this->assertEquals("10:50", $this->time->getTime());
        $this->assertEquals("10", $this->time->getHours());
        $this->assertEquals("50", $this->time->getMinutes());        
    }

    public function testCreatingTimeFromString() {
        $myTime = Time::create("10:50");
        $this->assertEquals("10", $myTime->getHours());
        $this->assertEquals("50", $myTime->getMinutes());
    }

    public function testComparingTimes() {
        $timeEquals     = new Time(10, 50);
        $this->assertTrue($this->time->equals($timeEquals));
        $timeNotEquals  = new Time(10, 44);
        $this->assertFalse($this->time->equals($timeNotEquals));
    }


    public function testRoundingTimes()
    {
        // Round test time.
        $roundedTime = $this->time->round();
        $this->assertEquals("10", $roundedTime->getHours());
        $this->assertEquals("45", $roundedTime->getMinutes());

        // Test some more times.
        $timesToTest = array(
            array(new Time(1,00), new Time(1,12)),
            array(new Time(3,15), new Time(3,28)),
            array(new Time(1,00), new Time(1,12)),
        );

        foreach($timesToTest as $timeToTest) {
            $this->assertTrue($timeToTest[0]->equals($timeToTest[0]->round()));
        }        
    }
}

class Time

<?php

class Time
{
    private $hours;
    private $minutes;

    public static function create($timestr) {
        $hours      = date('g', strtotime($timestr));
        $minutes    = date('i', strtotime($timestr));
        return new Time($hours, $minutes);
    }

    public function __construct($hours, $minutes) {
        $this->hours    = $hours;
        $this->minutes  = $minutes;
    }

    public function equals(Time $time) {
        return  $this->hours == $time->getHours() &&
                 $this->minutes == $time->getMinutes();
    }

    public function round() {
        $roundedMinutes = $this->minutes - ($this->minutes % 15);
        return new Time($this->hours, $roundedMinutes);
    }

    public function getTime() {
        return $this->hours . ":" . $this->minutes;
    }

    public function getHours() {
        return $this->hours;
    }

    public function getMinutes() {
        return $this->minutes;
    }
}

Running Test

alfred@alfred-laptop:~/htdocs/time$ phpunit TimeTest.php 
PHPUnit 3.3.17 by Sebastian Bergmann.

....

Time: 0 seconds

OK (4 tests, 12 assertions)
5
ответ дан 26 November 2019 в 20:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: