Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Вывод правильного окончания слова дня/дней (http://forum.oszone.net/showthread.php?t=330617)

dosperados 19-10-2017 12:49 2771776

Вывод правильного окончания слова дня/дней
 
Задача вывести правильное окончание к числу дней/дня
Пример:
99 дней
101 день
100 дней
102 дня

Как написанный ниже код сделать красивей и компактней.
Подскажите ГУРУ)
Код:

$start = (Get-Date).AddDays(-99)
$end = (Get-Date)
[int]$days = ($end - $start).Days
if ($days -ge "100") {$days = $days.ToString().substring(($days.ToString().Length)-2)} else {}
if ($days -le "19") {
    if ($days -eq "1") {$ruday = 'день'}
    elseif (($days -le "4") -and ($days -gt "1")) {$ruday = 'дня'}
    else {$ruday = 'дней'}
    }
else {
    $cutdays = $days.ToString()[-1]
    if ($cutdays -eq "1") {$ruday = 'день'}
    elseif (($cutdays -le "4") -and ($cutdays -gt "1")) {$ruday = 'дня'}
    else {$ruday = 'дней'}
    }
[int]$days = ($end - $start).Days
Write-Output "$days $ruday"


Kazun 19-10-2017 14:23 2771793

Код:

if($d -ge 0)
{
        $y = $d % 10
        if ($d -ge 10 -and [int]($d / 10 % 10) -eq 1) {"$d дней"}
        elseif ($y -eq 1) {"$d день"}
        elseif ((2,3,4) -eq $y) {"$d дня"}
        else {"$d дней"}
}


dosperados 20-10-2017 05:45 2771910

Вот еще одна логика, может кому пригодится
Конечно думаю что Вы Kazun, сможете и ее улучшить, упростить.

Код:

if ($days.ToString()[-2] -eq "1") {
    $ruday = "дней"
}
else {
    [char]$digit = $days.ToString()[-1]
    if ($digit -eq "1") {$ruday = "день"}
    elseif (($digit -le "4") -and ($digit -gt "1")) {$ruday = "дня"}
    else {$ruday = "дней"}
}



Время: 04:32.

Время: 04:32.
© OSzone.net 2001-