|
|
|
| Собственно задача очень простая, но вот думаю как бы лучше:
Требуется выводить слово год (или года, или лет) после числа. Допустим, 50 лет, 51 год, 52 года и т.д.
пишу так:
<?php
// Допустим $r=52
$r = 52;
// Определяем последнюю цифру числа
$r = $r % 10;
// Проверка последней цифры и вывод нужного окончания
if ($r==0 || $r==5 || $r==6 || $r==7 || $r==8 || $r==9 || $r%100==11 || $r%100==12 || $r%100==13 || $r%100==14) $a = "лет";
elseif ($r==1) $a = "год";
elseif ($r==2 || $r==3 || $r==4) $a = "года";
echo $r, $a;
/* или же вместо || - xor */
?>
|
Но уж больно длинно и запутанно получается...
Может упростить кто поможет...
Пробовал ещё через (новое для меня:)))
condition ? iftrue : iffalse;
|
Но что-то не хочет правильно работать...
И вообще, когда нужно использовать обычную конструкцию if...else, а когда: condition ? iftrue : iffalse; | |
|
|
|
|
|
|
|
для: afdm
(16.12.2007 в 00:03)
| | Как насчет $r = 12 ? | |
|
|
|
|
|
|
|
для: Trianon
(16.12.2007 в 00:25)
| | ну да. работает вроде. завтра (ну т.е. уже сегодня) проверю. | |
|
|
|
|
|
|
|
для: afdm
(16.12.2007 в 00:03)
| | 1 - это "год", от 2 по 4 это "года", от 5 по 20 и все остальное "лет". Зачем проверять 0, 5 ... 9? | |
|
|
|
|
|
|
|
для: sim5
(16.12.2007 в 00:44)
| | хм... а правда. завтра соображу :) | |
|
|
|
|
|
|
|
для: afdm
(16.12.2007 в 00:03)
| | ещё один вопрос можно?
насколько мне известно, в windows дата от 1902 до 2038 года?! так? т.е. после 2038 года
вот это
<?php
if ($r == 1) $text = "год";
elseif ($r == 2 xor $r == 3 xor $r == 4) $text = "года";
else $text = "лет";
?>
|
перестает работать... А на *nix сервере как себя поведет? Там-то ведь дата имеет больший "диапазон"? | |
|
|
|
|
|
|
|
для: afdm
(16.12.2007 в 12:17)
| | да и ещё: почему-то не хочет работать с 11, 12, 13 и 14. как Трианон и говорил :((( | |
|
|
|
|
|
|
|
для: afdm
(16.12.2007 в 12:30)
| | Про возраст вот в этой теме долго велись баталии, kasmanaft не выдержал и выставил готовое решение. :) Про 2038 это вы откуда взяли? | |
|
|
|
|
|
|
|
для: sim5
(16.12.2007 в 12:36)
| | 2038: проверял, щелкал календарик и после 2038 года возвращается отрицательный результат.
Все начинается с начала, с 1902 года, т.к. мне необходимо от текущего года отнять 1933. | |
|
|
|
|
|
|
|
для: afdm
(16.12.2007 в 12:44)
| | Какой календарик? А вы что на JS у клиента из под Windows получаете дату? | |
|
|
|
|
|
|
|
для: sim5
(16.12.2007 в 12:48)
| | да ну нет же! :))) это я просто проверял у себя на localhoste. А спрашиваю как себя это всё поведёт на реальном сервере, т.е. на *unix? там ведь вроде бы дата с XXXX до 9999?
значит всё норм. будет?!
ЗЫ а как быть с искл. ? с 12 например... Пробовал через case написать... не работает :((( | |
|
|
|
|
|
|
|
для: afdm
(16.12.2007 в 12:52)
| | А чего вы пытаетесь добиться с помощью XOR? | |
|
|
|
|
|
|
|
для: afdm
(16.12.2007 в 12:52)
| | А как вы дату получаете?
Если $year = 2038; - то работать будет и с 2000038 годом..
Если с помощью time() (timestamp) - тогда, да. Наверное, будут проблемы. | |
|
|
|
|
|
|
|
для: afdm
(16.12.2007 в 12:17)
| | а как всё-таки быть-то с 12? | |
|
|
|
|
|
|
|
для: afdm
(16.12.2007 в 00:03)
| | Может как-то так:
<?php
function pluralForm($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;
}
$copyBook = 5;
echo 'У вас ', $copyBook, ' ', pluralForm($copyBook, 'тетрадь.', 'тетради.', 'тетрадей.');
|
| |
|
|
|
|
|
|
|
для: Nemezis
(16.12.2007 в 13:24)
| | Спасибо всем!!! всё, работает... :))) | |
|
|
|