Блин, как же всё сложно с этой датой, почему у нас в каждом году не 365 дней ровно? Почему в каждом году у нас не 8760 часов ровно? Почему в каждом году у нас не 31536000 секунд ровно??
Как же я запарился с этими числами.
Может кто-то знает решение?
Задача следующая: есть типичная обычная дата: 28 июля 2006 год. (28.07.2006). Нужно вывести в формате: «Х год ХХ месяцев ХХ дней», с вычисление текущего дня месяца и года. То есть (даты для примера):
Всё бы отлично, всё бы хорошо, ан нет, из-за тупизма в Феврале (будь он не ладен с этими високосными годами), получается так, что цифры скачут :( То дате дня не достает, то наоборот перебор. Помогите пожалуйста разобраться. Светлые головы.
Сам код подсчета даты:
Плз не минусуйте меня. Топик не хочу на всеобщее обозрение, т.к. это не топик, а хелпдеск скорее. Кто-то если реально сталкивался с такой проблемой и знает решение, пожалуйста помогите.
UPDATE: Если кому нужно, то ответ мне подсказали на ru_php. Рабочий скрипт. Конечно это немного не то что я хотел, т.е. я хотел доработать свой, разобрать в нём, а не использовать уже чужой, готовый скрипт. Но всё же, зато работает.
Ссылка: ru_php/comments
Как же я запарился с этими числами.
Может кто-то знает решение?
Задача следующая: есть типичная обычная дата: 28 июля 2006 год. (28.07.2006). Нужно вывести в формате: «Х год ХХ месяцев ХХ дней», с вычисление текущего дня месяца и года. То есть (даты для примера):
First date: 28.07.2006
Date now: 28.07.2007
Result: 1 год
First date: 28.07.2006
Date now: 28.01.2008
Result: 1 год 6 месяцев
First date: 28.07.2006
Date now: 28.07.2008
Result: 2 года
First date: 28.07.2006
Date now: 30.08.2008
Result: 2 года 1 месяц 2 дня
Всё бы отлично, всё бы хорошо, ан нет, из-за тупизма в Феврале (будь он не ладен с этими високосными годами), получается так, что цифры скачут :( То дате дня не достает, то наоборот перебор. Помогите пожалуйста разобраться. Светлые головы.
Сам код подсчета даты:
function pf($n, $form1, $form2, $form5) {
$n = abs($n) % 100;
$n1 = $n % 10;
if ($n > 10 && $n < 20) return $form5;
if ($n1 > 1 && $n1 < 5) return $form2;
if ($n1 == 1) return $form1;
return $form5;
}
$mktime = mktime(0,0,0,7,28,2006);
$nowTime = mktime(0,0,0,7,28,2007); //time();
// CheckGregorian
$y = date("Y",$nowTime);
$minus = 0;
if(!checkdate(2,29,$y)) $minus = 86400;
$mSec = $nowTime - $mktime - $minus;
$yDay = 365 * 86400;
$year = ($mSec - ($mSec % $yDay)) / $yDay; //31557600
$mSec = $mSec - ($year * $yDay);
$month = ($mSec - ($mSec % 2629800)) / 2629800;
$mSec = $mSec - ($month * 2629800);
$day = ($mSec - ($mSec % 86400)) / 86400;
if($year != 0) echo "Мы вместе $year ".pf($year,"год","года","лет");
if($month != 0) echo " $month ".pf($month,"месяц","месяца","месяцев");
if($day != 0) echo " $day ".pf($day,"день","дня","дней");
Плз не минусуйте меня. Топик не хочу на всеобщее обозрение, т.к. это не топик, а хелпдеск скорее. Кто-то если реально сталкивался с такой проблемой и знает решение, пожалуйста помогите.
UPDATE: Если кому нужно, то ответ мне подсказали на ru_php. Рабочий скрипт. Конечно это немного не то что я хотел, т.е. я хотел доработать свой, разобрать в нём, а не использовать уже чужой, готовый скрипт. Но всё же, зато работает.
Ссылка: ru_php/comments