Всем привет! Снова добрался до блога и решил что-нибудь отписать! Этим что-нибудь я хочу сделать то, как я провел пару последних недель. Эти две недели были жесткими в плане того, что готовили игру FFQ на 09.10.2010 и к этому всему я разрабатывал движок для контроля игрового процесса – бессонные ночи, нераздупленное утро и очень длинный день! Надеюсь, многие играли когда-нибудь в городские квесты на машинах или пешком, где толпа обезбашенных людей бегает по улицам, заводам, заброшенным домам, под мостами и даже плавают в море в очень холодную пору в поисках кода. Если да, то вы должны понимать о чем я, а если же нет, то гугл в помощь и срочно искать организаторов в Вашем городе! В итоге всех усилий, игровой движок прошел боевое крещение со всего одним вылезшим багом во время игры, который очень оперативно был мною устранен. Вот что у меня получилось: 

К слову, это мой первый проект, который оптимизируется под пользование мобильными устройствами в большинстве своем. Чем можно с этого поделиться? Я думаю, я знаю, опишу одну функцию, которая позволяет отсчитать оставшееся время до какой-нибудь даты. Эта функция, конечно, после самого игрового класса с его методами, пожалуй, самая главная. Причем она участвует в работе игрового класса тоже. Ведь вся игра отталкивается от времени, она лимитирована временем и с помощью времени можно вести статистику команд. Вот собственно сам код: 

<?
function TimeLeft($bedin_date,$begin_time){
        // Вычисляем сколько дней осталось до дня Х
	$dayhour = substr($bedin_date,8,2)-date(d)-1;
        // Переводим дни в часы
	$dayhour = $dayhour*24+substr($begin_time,0,2);
        // Расчет оставшихся минут
	$dayminute = substr($begin_time,3,2);
        // Оставшиеся секунды
	$daysecond = substr($begin_time,6,2);
        // Записываем в переменные $now_h, $now_m, $now_s часы, минуты, секунды
          соответственно реального вермени
	$now_h = 23-date(H);
	$now_m = 60-date(i);
	$now_s = 60-date(s);
        // Добавляем ведущие нули к часам, минутам и секундам, если таковые
          требуются
	$dayhour = Ich($dayhour+$now_h);
	$dayminute = Ich($dayminute+$now_m);
	$daysecond = Ich($daysecond+$now_s);
                // Если минуты перевалили за 60 или равны 60ти, то вычитаем из минут 60,
                  а к часам добавляем 1.
		if($dayminute>=60){
			$dayhour = $i->Ich($dayhour+1);
			$dayminute = $i->Ich($dayminute-60);
                        // Проверяем на истечение срока
			if($dayhour<0){
				echo '<h2>Время уже прошло!</h2>';
			}
			else{
                                // выводим строку "Осталось: 00ч. 00мин. 00сек."
				echo '<h2>Осталось:
                                '.$dayhour.'ч. '.$dayminute.'мин. '.$daysecond.'сек.</h2>';
			}
		}else{
                        // Проверяем на истечение срока
			if($dayhour<0){
				echo '<h2>Время уже прошло!</h2>';
			}
			else{
                                // выводим строку "Осталось: 00ч. 00мин. 00сек."
				echo '<h2>Осталось:
                                '.$dayhour.'ч. '.$dayminute.'мин. '.$daysecond.'сек.</h2>';
			}
		}
	}
?>

*Одна пометочка, функция рассчитывает оставшееся время в течение месяца, не больше. Для того, чтобы рассчитать время в течение года, функцию нужно немного модифицировать, думаю, исходя из примера это не составит большого труда. 

Если вы заметили, то в этом коде присутствует еще одна функция, Ich();. Ее роль очень мала, но достаточно велика. Для правильной работы функции TimeLeft(); и для верной синхронизацией с базой данных, от даты требуется формат 0000-00-00, а от времени 00:00:00. Так вот если с датой проблем не возникло, то с временем возникли. Если уже смотрели код, то должны были увидеть использование substr();, что и является проблемой из-за статических параметров. Задача была такова - date("H:i:s") не выводил время в формате, указанном в спецификации этой функции, что приводило к неправильной работе функции TimeLeft();, гуглил, ничего не нарыл, а просто дописал еще одну функцию Ich(); Вот код: 

<?
function Ich($str){
$var = strlen($str);
	if($var===1){
		$str = '0'.$str;
		return $str;
	}
	elseif($var===2){
		return $str;
	}
	elseif($var>2){
		return $str;
	}
}
?>

Кстати, если кому понравился плагин, для того чтобы выводить в статье код с подсветкой синтаксиса, нашел я его тут

Вобщем думаю Вам понадобится, с уважением Я:)


Знаете ли вы?

Что люди тоже звери. Однако, мы единственные из них, кто можем совокупляться лицом к лицу.

KDPsite...