Подсчет количества дней между двумя датами
Где может пригодиться?
Если вы решили осуществить подсчет количества дней между двумя датами, например, вывести в футерной части сайта количество дней, отражающих возраст вашего сайта/блога. А решение воспользоваться заурядным форматом - "2012г. - 2014г." вам не особо нравится, вы ведь натура творческая, отсюда и подход должен быть оригинальным. Поэтому вы решили сделать вывод вида: "Нам уже 711 дней!", смотрится неординарно, а значит - это то, что вам нужно.
В реализации данного вывода нет ничего сложного, единственный нюанс, с которым я повозился, осуществить склонение слова "день", сайт то с каждым днем становится старше на один день. А запись вида: "Нам 709 дня" меня не особо привлекала. Поэтому было принято решение склонять слово "день" исходя из численного значения.
От теории к практике
<?php
// Преобразуем строковое значение даты отсчета, в дату, с помощью функции strtotime. Получаем дату в формате GNU
$reference_date = strtotime("2013-12-25");
// Сегодняшняя дата
$now = strtotime("now");
// Получаем количество дней между установленной датой и сегодняшним днем
$date = floor (($now - $reference_date)/86400);
?>
На данном этапе, в переменной $date у нас количество дней между заданными датами. Осталось реализовать склонение слова "день" относительно числового значения.
<?php
function declination($count){
// Задаем в переменные три возможные формы склонения
$form1 = "день";
$form2 = "дня";
$form3 = "дней";
// Используем деление по модулю
$count = abs($count) % 100;
$lcount = $count % 10;
// Сравниваем значение, отдаем нужную форму
if ($count >=11 && $count <=19 ) return($form3);
if ($lcount >= 2 && $lcount <= 4 ) return($form2);
if ($lcount == 1) return($form1);
// Во всей других случаях отдаем третью форму
return $form3;
}
?>
Осталось скомпоновать и вывести
<?php
print "Моему блогу уже - " . $date . " " . declination($date);
?>
В итоге получаем - "Моему блогу уже - 123 дня", а через два дня "Моему блогу уже - 125 дней".