Склонение слов и правильная запись времени в виде текста

Необходимость правильно склонять слова существует практически на любом сайте, хотя бы для отображения времени. В этой статье я предоставлю две небольшие функции, позволяющие склонять слова, а также функцию преобразующую время в виде unix_timestamp в читабельный формат.

Честно сказать, функция склонения слов была где-то мной взята из просторов интернета, то это было так давно, что я уже не помню откуда и кто автор данной функции.

Склонение слов

функция принимает целых три параметра, хотя третий и не является обязательным. В первом мы передаем само число, во втором параметре массив из трех элементов содержащий три вариации написания склоняемого слова, а в третьем параметре задаем флаг отображения числа. Если параметр стоит true, то будет выводится само число в результате работы функции, иначе выведется просто нужное склонение.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function declension($int, $expressions, $showint = true) {
    settype($int, "integer");
    $count = $int % 100;
    if ($count >= 5 && $count <= 20) {
        $result = ($showint? $int." ":"").$expressions['2'];
    } else {
        $count = $count % 10;
        if ($count == 1) {
            $result = ($showint? $int." ":"").$expressions['0'];
        } elseif ($count >= 2 && $count <= 4) {
            $result = ($showint? $int." ":"").$expressions['1'];
        } else {
            $result = ($showint? $int." ":"").$expressions['2'];
        }
    }
    return $result;
 }

Для примера рассмотрим такой вызов:

1
echo 'Ваш заказ на '.price_format($total_price).' '.declension($total_price, array('рубль', 'рубля','рублей'), false).'.';

Как видите, все просто, более того, я применил еще и функцию правильного отображения чисел из предыдущей статьи. Они отлично сочетаются вместе.

Вывод времени в текстовом формате

Я всегда храню дату в базе в формате unix_timestamp, т.к. это позволяет производить математические операции со временем, а также сравнивать даты. Но выводить все же стоит более удобным способом чем в виде date('H:i:s',$date); , хотя этот вариант иногда тоже подходит.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function mk_myTime($tonpage) {
    if ($tonpage == 0)
        return '';
    $h = $tonpage / 3600; //часы
    if ($pos = strpos($h, '.'))
        $h = substr($h,0,$pos);
    $timenothour = $tonpage - ($h * 3600);
    $m = $timenothour / 60; //минуты
    if ($pos = strpos($m, '.'))
        $m = substr($m,0,$pos);
    $sec = $timenothour - ($m * 60); //секунды
    $s = '';
    if (intval($h)) $s = declension($h, array("час", "часа", "часов")).' ';
    if (intval($m)) $s .= declension($m, array("минуту", "минуты", "минут")).' ';
    return $s .= declension($sec, array("секунду", "секунды", "секунд")).' ';
}

Эта функция принимает один параметр – время в формате unix_timestamp. Она также использует предыдущую функцию declension для склонения часов минут и секунд.

Надеюсь, эти функции кому-нибудь для пригодятся.

Метки: , , ,

Воскресенье, января 10, 2010 php

Комментировать

При копировании материалов указывайте ссылку на http://kuaa.ru