За начальную дату я взял дату создания первого собственного домена второго уровня - 01.03.2009. Особо внимательные поймут, о каком домене идет речь =)
Задача понятна: нужно было просто рассчитать разницу между 01.03.2009 и текущей всегда меняющейся даты. И для этого я решил использовать представление даты в Unix TimeStamp, подробнее о котором вы можете узнать в описании конвертера Unix даты. После сведения даты в число остается только вычесть из большего числа меньшее (из числа текущей даты вычитаем число даты 01.03.2009) и перевести время из секунд в годы (обычная математика путем деления).
Так вот, перейдем к реализации. Дабы экономить место, у себя в коде я прописал все компактно одной строкой. Кто не хочет вникать, вот (только замените числа 3, 1 и 2009 на свой месяц, день и год соответственно):
echo floor((time()-mktime(0, 0, 0, 3, 1, 2009))/(60*60*24*365));
Я для тех, кто всетаки хочет понять, что именно написано в этой строке, я распишу все более подробно:
//задаем переменные $month = 3; //месяц от 1 до 12 $day = 1; //день от 1 до 31 $year = 2009; //год $hour = 0; //час от 0 до 23 $minute = 0; //минуты от 0 до 59 $second = 0; //секунды от 0 до 59 //часы, минуты и секунды указывать не обязательно, //поэтому у меня они равны 0, 0, 0 - что соответстует 12 часам ночи ровно //(если, конечно, вам не нужна переделяная точность до часа, минуты, секунды) //формируем unix-число нужной даты на основе заданных выше переменных $get_past_time = mktime($hour, $minute, $second, $month, $day, $year); //получаем unix-число текущей даты $get_current_time = time(); //выполняем математику: вычитаем из $get_current_time число $get_past_time //и перегоняем полученный результат в секундах в годы //(1 минута = 60 секунд, 1 час = 60 минут, 1 сутки = 24 часа, 1 год = 365 дней) //на основе этого получается, что секунды нужно делить на 60*60*24*365 $math_years = ($get_current_time - $get_past_time)/(60*60*24*365); //получаенное не целое число лет округляем в меньшую сторону, //так как нам нужно знать полное количество лет $final_years = floor($math_years); //все, количество лет с отпределенной даты получено //и находится в переменной $final_years - можно выводить echo "Прошло уже более ".(int)$final_years." лет.";
Этот код аналогичен строке, что я написал выше. Разница только в том, что тут описано все детально и пошагово, а там все компактно и одной строкой.
Вот такая нехитрая математика и PHP.
Желаю всем удачи в экспериментах над датами в PHP =)
Если есть вопросы, то пишите их в комментариях.
Все комментарии к заметке "Как посчитать количество лет с определенной даты на PHP"
Оставьте свой комментарий первым!