PowerShell New-TimeSpan отображается дружелюбно с днями, часами, минутами, секундами, секундами - PullRequest
0 голосов
/ 25 апреля 2020

Я искал скрипт PowerShell, похожий на примеры, найденные в . NET examples . Взять New-TimeSpan и отобразить на 1 день, 2 часа, 3 минуты, 4 секунды. Исключите, где его ноль, добавьте множественное число "s", где это необходимо. У кого-нибудь есть под рукой?

Насколько я понял:

$StartDate = (Get-Date).ToString("M/dd/yyyy h:mm:ss tt")

Write-Host "Start Time: $StartDate"

# Do Something

$EndDate = (Get-Date).ToString("M/dd/yyyy h:mm:ss tt")

Write-Host "End Time: $EndDate" -ForegroundColor Cyan

$Duration = New-TimeSpan -Start $StartDate -End $EndDate
$d = $Duration.Days; $h = $Duration.Hours; $m = $Duration.Minutes; $s = $Duration.Seconds

Write-Host "Duration: $d Days, $h Hours, $m Minutes, $s Seconds"

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Представление таблицы неплохое:

new-timespan -Days 1 -Hours 1 -Minutes 1 -Seconds 1 | ft

Days Hours Minutes Seconds Milliseconds
---- ----- ------- ------- ------------
1    1     1       1       0
0 голосов
/ 25 апреля 2020

Почему бы не сделать это прямо так:

$StartDate = (Get-Date).AddDays(-1).AddMinutes(-15).AddSeconds(-3)
$EndDate = Get-Date

$Duration = New-TimeSpan -Start $StartDate -End $EndDate

$Day = switch ($Duration.Days) {
    0 { $null; break }
    1 { "{0} Day," -f $Duration.Days; break }
    Default {"{0} Days," -f $Duration.Days}
}

$Hour = switch ($Duration.Hours) {
    #0 { $null; break }
    1 { "{0} Hour," -f $Duration.Hours; break }
    Default { "{0} Hours," -f $Duration.Hours }
}

$Minute = switch ($Duration.Minutes) {
    #0 { $null; break }
    1 { "{0} Minute," -f $Duration.Minutes; break }
    Default { "{0} Minutes," -f $Duration.Minutes }
}

$Second = switch ($Duration.Seconds) {
    #0 { $null; break }
    1 { "{0} Second" -f $Duration.Seconds; break }
    Default { "{0} Seconds" -f $Duration.Seconds }
}

"Duration: $Day $Hour $Minute $Second"

Вывод будет:

Duration: 1 Day, 0 Hours, 15 Minutes, 3 Seconds

С 2 в каждой части продолжительности ...

$StartDate = (Get-Date).AddDays(-2).AddHours(-2).AddMinutes(-2).AddSeconds(-2)

результат будет следующим:

Duration: 2 Days, 2 Hours, 2 Minutes, 2 Seconds

Конечно, вы должны заключить это в функцию, если она вам нужна более одного раза. ; -)
И, конечно, вы можете добавить более сложные условия, если хотите.

...