За time(); и безподобно модулно делене, друго не се сещам...
Времето, с което ще работите ще е винаги в реални секунди, а когато трябва да го показвате на потребителя съобразно времето на играта ще го преобръщате.
Ето ви примерни съотношения:
$minuta=20;
$chas=$minuta*60;
$den=$chas*24;
можете да си ги сметнете като стойност в секунди или да ги ползвате като констатнта или пък да ги обърнете в алгоритъм...
Играта стартира:
$nachalo=time();
Стойността на $nachalo си го записвате някъде, после всеки път, когато ви трябва текущо време:
$sega=time();
Изминало време:
$vreme=$sega - $nachalo;
Предстоящо бъдещо събитие, напр след 3 часа:
$bydeshte=$sega+($chas*3);
3 часа назад:
$minalo=$sega - ($chas*3);
3 часа и 50 мин назад:
$minalo=$sega - (($chas*3)+($min*50));
Така винаги имате стойността в секунди. После си я обръщате в минути, часове или дни... Ако искате да сте по-прецизни, ще трябва да използвате модулно делене (с %) и да въртите цикъл за да получите точни дни, часове, сек...
Ето една функция, к обръща резултата (задачката ми се струва занимателна) в хронологично време според условието на играта:
function f_gameTime($sega, $nachalo=0)
{
$minuta=20;
$chas=$minuta*60;
$den=$chas*24;
$mesec=$den*30;
$godina=$mesec*12;
$vremeSek=$sega - $nachalo;
if($vremeSek > ($godina-1))
{
$minus4=$vremeSek % $godina;
$godini=($vremeSek-$minus4)/$godina;
$minus3=$vremeSek % $mesec;
$meseci=($minus4-$minus3)/$mesec;
$minus2=$vremeSek % $den;
$dni=($minus3-$minus2)/$den;
$minus1=$vremeSek % $chas;
$chasove=($minus2-$minus1)/$chas;
$minus=$vremeSek % $minuta;
$minuti=($minus1-$minus)/$minuta;
}
elseif($vremeSek > ($mesec-1))
{
$minus3=$vremeSek % $mesec;
$meseci=($vremeSek-$minus3)/$mesec;
$minus2=$vremeSek % $den;
$dni=($minus3-$minus2)/$den;
$minus1=$vremeSek % $chas;
$chasove=($minus2-$minus1)/$chas;
$minus=$vremeSek % $minuta;
$minuti=($minus1-$minus)/$minuta;
}
elseif($vremeSek > ($den-1))
{
$minus2=$vremeSek % $den;
$dni=($vremeSek-$minus2)/$den;
$minus1=$vremeSek % $chas;
$chasove=($minus2-$minus1)/$chas;
$minus=$vremeSek % $minuta;
$minuti=($minus1-$minus)/$minuta;
}
elseif($vremeSek > ($chas-1))
{
$minus1=$vremeSek % $chas;
$chasove=($vremeSek-$minus1)/$chas;
$minus=$vremeSek % $minuta;
$minuti=($minus1-$minus)/$minuta;
}
elseif($vremeSek > ($minuta-1))
{
$minus=$vremeSek % $minuta;
$minuti=($vremeSek-$minus)/$minuta;
}
else
{
$minus=$vremeSek;
}
$sekundi=$minus*3;
$vreme[1]=$godini;
$vreme[2]=$meseci;
$vreme[3]=$dni;
$vreme[4]=$chasove;
$vreme[5]=$minuti;
$vreme[6]=$sekundi;
return $vreme;
}
Функцията връща масив, к може да си обходите с ето тази функция

:
function f_echoTime($vreme)
{
$name[1]="Години";
$name[2]="Месеци";
$name[3]="Дни";
$name[4]="Часа";
$name[5]="Минути";
$name[6]="Секунди";
for($i=1; $i < (count($vreme)+1); $i++)
{
if(!empty($vreme[$i]))
{
$vremeRaz[]=$vreme[$i]." ".$name[$i];
}
}
$kolko=(count($vremeRaz)-1);
if($kolko!=0)
{
for($i=1; $i < $kolko; $i++)
{
$vremeList.=", ".$vremeRaz[$i];
}
$vremeNiz=$vremeRaz[0].$vremeList." и ".$vremeRaz[$kolko];
}
else
{
$vremeNiz=$vremeRaz[0];
}
return $vremeNiz;
}
?>
... която ще го върне като низ, к просто принтирате. Този низ не е за сметки. Горната смята, тази връща за принтиране.
Как ги извиквате:
Ако искате да сметнете времето м/у два момента, да кажем ето този пример от по-горе:
$vreme=$sega - $nachalo;
$vreme=f_gameTime($sega ,$nachalo);
Ако искате да вземете само изминалите месеци без възможни години или пък по-малки стойности като дни или часове:
echo $vreme[2];
Ако икате да получите пълното хронологично време:
$list=f_echoTime($vreme);
echo $list;
Толкова...
Подробности за математическите оператори + акцент на модулното делене:
http://www4u.search.bg/index2.php?ph&c=1&PHPSESSID=249f1f634b833657ff27853238b0a701
От вас зависи дали е имало полза или съм си загубил времето

Успех!