Правильное окончание дня/дней/день

Статус
В этой теме нельзя размещать новые ответы.

terkin

Мой дом здесь!
Регистрация
9 Дек 2006
Сообщения
513
Реакции
200
Вобщем примитив но мне часто бывает нужен поэтому вот :
PHP:
function  days($day)
	{
		$a=substr($day,strlen($day)-1,1);
		if($a==1) $str="день";
		if($a==2 || $a==3 || $a==4) $str="дня";
		if($a==5 || $a==6 || $a==7 || $a==8 || $a==9 || $a==0) $str="дней";
	    return $str;
	}
Вызываем :
PHP:
$days=150;
echo $days." ".days($days) ;
 
Код:
[B]ru[/B]  [B]Russian[/B]  nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10< =4 && (n%100<10 or n%100>=20) ? 1 : 2)

И как это использовать ?
 
у меня есть универсальный вариант, которым давно уже пользуюсь
PHP:
function decl($int, $expr){ 
  settype($int, "integer"); 
  $count = $int % 100; 
  if ($count >= 5 && $count <= 20) { 
    $result = $int." ".$expr['2']; 
  } else { 
    $count = $count % 10; 
    if ($count == 1) { 
      $result = $int." ".$expr['0']; 
    } elseif ($count >= 2 && $count <= 4) { 
      $result = $int." ".$expr['1']; 
    } else { 
      $result = $int." ".$expr['2']; 
    } 
  } 
  return $result; 
}
вызов простой:
$value = 18;
$decl = array('фотка', 'фотки', 'фоток')
или
$decl = array('день', 'дня', 'дней')
или
$decl = array('рубль', 'ру***', 'рублей')

declension($value, $decl);
 
Код:
[B]ru[/B]  [B]Russian[/B]  nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10< =4 && (n%100<10 or n%100>=20) ? 1 : 2)

И как это использовать ?

Примерно так, следующий код:

PHP:
function plural_type($n) {
  return ($n%10==1 && $n%100!=11 ? 0 : ($n%10>=2 && $n%10<=4 && ($n%100<10 || $n%100>=20) ? 1 : 2));
}

$_plural_years = array('год', 'года', 'лет');
$_plural_months = array('месяц', 'месяца', 'месяцев');
$_plural_days = array('день', 'дня', 'дней');
$_plural_times = array('раз', 'раза', 'раз');

$x = 2;
echo "$x " . $_plural_years[plural_type($x)];

$x = 8;
echo " $x " . $_plural_months[plural_type($x)];

$x = 3;
echo " $x " . $_plural_days[plural_type($x)];

$x = 55;
echo " $x " . $_plural_times[plural_type($x)];

выведет:
2 года 8 месяцев 3 дня 55 раз
 
вот это даааа.... я парился долго с написанием подобных функций.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху