Q:

Время до указанного часа

Нужно посчитать время до ближайшего нужного часа, период - каждые 6 часов, это 00, 6, 12, 18. Выдать время до этого часа в секундах. Остановился на самом конце.
function itime() {
//Текущее время
$nt = date('G:i:s', time());
list($hour, $min, $sec) = explode(':', $nt);

//Узнаём ближайший час
if ($hour >= 0 && $hour < 6) { $wayth = 6; }
if ($hour >= 6 && $hour < 12) { $wayth = 12; }
if ($hour >= 12 && $hour < 18) { $wayth = 18; }
if ($hour >= 18 && $hour < 0) { $wayth = 0; }

//Считаем время до этого часа

}

echo itime();

A:

function itime() {
    //Текущее время
    $currentTime = time();
    $nt = date('Y:m:d:G:i:s:', $currentTime);
    list($year,$month,$day, $hour, $min, $sec) = explode(':', $nt);

    //Узнаём ближайший час
    if ($hour >= 0 && $hour < 6) { $wayth = 6; }
    if ($hour >= 6 && $hour < 12) { $wayth = 12; }
    if ($hour >= 12 && $hour < 18) { $wayth = 18; }
    if ($hour >= 18 && $hour <= 23){
        // новый день
        $day += 1;
        //проверяем месяца по 31 дню
        if ($day == 32){
            $month += 1;
            //проверяем декабрь
            if ($month == 12){
                $year += 1;
            }
        }
        //проверяем месяца по 30 дней
        elseif ($day == 31 ){
            $monthList = array(4,6,9,11);
            if (in_array($month, $monthList)){
                $month += 1;
            }

        }
        //проверяем високосный февраль
        elseif ($day == 30 && $year%4 == 0 && $month == 2){
            $month += 1;
        }
        //проверяем просто февраль
        elseif ($day == 29 && $month == 2){
            $month += 1;
        }

        $wayth = 0;
    }
    $targetTime = mktime($wayth,0,0,$month,$day,$year);

    //Считаем время до этого часа
    $result = $targetTime - $currentTime ;
    return $result;
}

echo itime();

