Как стать автором
Обновить

Gregorian Date или Б%#; ФЯМ%:! с этой датой!

Время на прочтение2 мин
Количество просмотров547
Блин, как же всё сложно с этой датой, почему у нас в каждом году не 365 дней ровно? Почему в каждом году у нас не 8760 часов ровно? Почему в каждом году у нас не 31536000 секунд ровно??

Как же я запарился с этими числами.
Может кто-то знает решение?

Задача следующая: есть типичная обычная дата: 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
Теги:
Хабы:
Всего голосов 12: ↑8 и ↓4+4
Комментарии1

Публикации