Фраза «мы работаем с 1880 года» звучит менее впечатляюще, чем «мы работаем более ». Можно, конечно, из года в год 1 января менять цифру «», а можно написать короткий скрипт, который сам рассчитает правильное количество лет.
Правильное склонение по-русски: «год», «года», «лет» в JavaScript
18 лет<script> function declOfNum(number, titles) { // склонение именительных рядом с числительным cases = [2, 0, 1, 1, 1, 2]; return number+" "+titles[ (number%100>4 && number%100<20)? 2 : cases[(number%10<5)?number%10:5] ]; } document.write( declOfNum(18, ['год', 'года', 'лет']) ); </script>
Сравнение дат в формате «год месяц день»
16 лет 4 месяца 14 дней<script> function declOfNum(number, titles) { cases = [2, 0, 1, 1, 1, 2]; return number+" "+titles[ (number%100>4 && number%100<20)? 2 : cases[(number%10<5)?number%10:5] ]; } function birthDateToAge(b, n) { var x = new Date(n), z = new Date(b), b = new Date(b), n = new Date(n); x.setFullYear(n.getFullYear() - b.getFullYear(), n.getMonth() - b.getMonth(), n.getDate() - b.getDate()); z.setFullYear(b.getFullYear() + x.getFullYear(), b.getMonth() + x.getMonth() + 1); if (z.getTime() == n.getTime()) { if (x.getMonth() == 11) { return [x.getFullYear() + 1, 0, 0]; } else { return [x.getFullYear(), x.getMonth() + 1, 0]; } } else { return [x.getFullYear(), x.getMonth(), x.getDate()]; } } var birth = birthDateToAge("2000-03-01", "2016-07-15"); document.write( declOfNum(birth[0], ['год', 'года', 'лет']) + " " + declOfNum(birth[1], ['месяц', 'месяца', 'месяцев']) + " " + declOfNum(birth[2], ['день', 'дня', 'дней']) ); // birth[0] — разница между датами в годах </script>
Вычисление возраста по дате рождения
<script> function declOfNum(number, titles) { cases = [2, 0, 1, 1, 1, 2]; return number+" "+titles[ (number%100>4 && number%100<20)? 2 : cases[(number%10<5)?number%10:5] ]; } function birthDateToAge(b) { var n = new Date(), b = new Date(b), age = n.getFullYear() - b.getFullYear(); return n.setFullYear(1972) < b.setFullYear(1972) ? age - 1 : age; } document.write( declOfNum(birthDateToAge("1880-07-15"), ['год', 'года', 'лет']) ); </script>
Пример: калькулятор возраста по дате рождения
Подсчёт разницы лет
<script> function declOfNum(number, titles) { cases = [2, 0, 1, 1, 1, 2]; return number+" "+titles[ (number%100>4 && number%100<20)? 2 : cases[(number%10<5)?number%10:5] ]; } document.write( declOfNum(new Date().getFullYear() - 1880, ['год', 'года', 'лет']) ); </script>
Определить количество дней между двумя датами
5980 дней<script> function declOfNum(number, titles) { cases = [2, 0, 1, 1, 1, 2]; return number+" "+titles[ (number%100>4 && number%100<20)? 2 : cases[(number%10<5)?number%10:5] ]; } function birthD(b, n) { var b = new Date(b), n = new Date(n); return (n - b)/86400000; } document.write( declOfNum(birthD("2000-03-01", "2016-07-15"), ['день', 'дня', 'дней']) ); </script>
Как посчитать разницу между датами в годах на PHP
<?php echo date('Y')-1880; ?>
«Год», «года», «лет» в зависимости от числа
<?php function YearTextArg($year) { $m = substr($year,-1,1); $l = substr($year,-2,2); return $year. ' ' .((($m==1)&&($l!=11))?'год':((($m==2)&&($l!=12)||($m==3)&&($l!=13)||($m==4)&&($l!=14))?'года':'лет')); } echo YearTextArg(date('Y')-1880); ?>
Рассчитать возраст на PHP
<?php $age = DateTime::createFromFormat('d/m/Y', '29/02/1880') ->diff(new DateTime('now')) ->y; echo $age; ?>
Возраст со словом «год», «года» или «лет»
<?php $age = DateTime::createFromFormat('d/m/Y', '29/02/1880') ->diff(new DateTime('now')) ->y; function YearTextArg($year) { $m = substr($year,-1,1); $l = substr($year,-2,2); return $year. ' ' .((($m==1)&&($l!=11))?'год':((($m==2)&&($l!=12)||($m==3)&&($l!=13)||($m==4)&&($l!=14))?'года':'лет')); } echo YearTextArg($age); ?>Использованные материалы:
11 комментариев:
Заранее благодарю за ответ
Для того, чтобы написать код в комментариях, пожалуйста используйте http://shpargalkablog.ru/2010/12/napisat-kod-tekstom.html
Так как все же ПРАВИЛЬНО вставить эту переменную вместо 'год' - эту: <?php echo JText::_( 'COM_CCK_LANG_VAR1' ); ?>, вместо 'года' - эту: <?php echo JText::_( 'COM_CCK_LANG_VAR2' ); ?> и вместо 'лет' - эту: <?php echo JText::_( 'COM_CCK_LANG_VAR3' ); ?> ?
Я сама php знаю поскольку постольку, просто он похож на JS
Для тех, кто будет повторять этот пример в Joomla, строка RETURN, должна выглядеть так:
return $year. ' ' .((($m==1)&&($l!=11))?JText::_( 'COM_CCK_LANG_VAR1' ):((($m==2)&&($l!=12)||($m==3)&&($l!=13)||($m==4)&&($l!=14))?JText::_( 'COM_CCK_LANG_VAR2' ):JText::_( 'COM_CCK_LANG_VAR3' )));
Ну и соответственно, нужно задать значения языковым переменным в lang-LANG.overide.ini
А подскажите, пожалуйста ещё и это. Как изменить этот код в JavaScript, если хочу, чтобы отражалось следующее:
Возраст автора на момент написания статьи: ... лет, ... месяцев.
Важно, чтобы я могла это вставить в шаблон сообщений. И у каждого конкретного поста ничего бы не нужно было исправлять. Один универсальный код для всех постов.