Округление времени на PHP

Категория: Программим

Не раз требовалось округлить время на PHP в формате timestamp, но к сожалению стандартных функций нет, и на гуглить ничего не удалось. Поэтому быстренько наваял свое.
Функция округляет входящее время до 10-х минут в меньщую сторону.
Т.е. 6:43 будет 6:40, а 2:17 будет 2:10.
Очень коряво, но мне надо было быстро это решить, очень мало времени, очень много надо сделать, не до оптимальности.
Если кто оптимизирует, велкам в коменты, буду рад.





Code:
function round_time($ts)
{
	// Получаем время округленное до минут
	$ts = round($ts/60)*60;
	// Получаем время округленное до часов
	$new_ts = floor($ts/3600)*3600;
	// Получаем количество минут
	$remainder = ($ts - $new_ts)/60;

	// Ну и само округление
	if( $remainder < 10 )
	{
        $remainder = 0;
	}
	else if( $remainder >= 10 && $remainder < 20 )
	{
        $remainder = 10;
	}
	else if( $remainder >= 20 && $remainder < 30 )
	{
        $remainder = 20;
	}
	else if( $remainder >= 30 && $remainder < 40 )
	{
        $remainder = 30;
	}
	else if( $remainder >= 40 && $remainder < 50 )
	{
        $remainder = 40;
	}
	else if( $remainder >= 50 && $remainder < 60 )
	{
        $remainder = 50;
	}
	// Добавляем к нашим часам нужное количество минут
	return $new_ts   $remainder*60;

}


Входное и выходное естественно в формате timestamp. Далее перевести время в человеко удобный формат не составляет проблем, благо встроенных функций валом.



Комментарии

Мой вариант:



function round_time($ts, $step) {

return(floor(floor($ts / 60) / 60) * 3600 floor(date("i", $ts) / $step) * $step * 60);

}



$ts - timestamp

$step - степень округления в минутах
Комментирование тупит, между "3600" и "floor" должен быть знак плюса
Большое спасибо автору за статью и, конечно, BestChange за отличное решение в одну строку!
респект. искал долго но нашел.
function round_time($ts, $step=1800) { return $step * round($ts / $step); }

$ts - timestamp

$step - степень округления в секундах

Имя (Псевдоним):

Секретный код:
сменить цифры
Секретный код Повторите код: