Я нашел результаты, подобные следующим уродливым:
1 год, 2 месяца, 0 дней, 0 часов, 53 минут и 1 секунда
blockquote>из того, что я реализовал функцию, которая учитывает множественные числа, удаляет пустые значения и, возможно, можно сократить результат:
function since($timestamp, $level=6) { global $lang; $date = new DateTime(); $date->setTimestamp($timestamp); $date = $date->diff(new DateTime()); // build array $since = json_decode($date->format('{"year":%y,"month":%m,"day":%d,"hour":%h,"minute":%i,"second":%s}'), true); // remove empty date values $since = array_filter($since); // output only the first x date values $since = array_slice($since, 0, $level); // build string $last_key = key(array_slice($since, -1, 1, true)); $string = ''; foreach ($since as $key => $val) { // separator if ($string) { $string .= $key != $last_key ? ', ' : ' ' . $lang['and'] . ' '; } // set plural $key .= $val > 1 ? 's' : ''; // add date value $string .= $val . ' ' . $lang[ $key ]; } return $string; }
Выглядит намного лучше:
1 год, 2 месяца, 53 минуты и 1 секунду
blockquote>При необходимости используйте
$level = 2
, чтобы сократить его следующим образом:1 год и 2 месяца
< / blockquote>Удалите часть
$lang
, если она вам нужна только на английском языке или отредактируйте этот перевод в соответствии с вашими потребностями:$lang = array( 'second' => 'Sekunde', 'seconds' => 'Sekunden', 'minute' => 'Minute', 'minutes' => 'Minuten', 'hour' => 'Stunde', 'hours' => 'Stunden', 'day' => 'Tag', 'days' => 'Tage', 'month' => 'Monat', 'months' => 'Monate', 'year' => 'Jahr', 'years' => 'Jahre', 'and' => 'und', );
Следующий скрипт запускается для меня в Windows 10 версии 1809:
$computer = '.' # $env:COMPUTERNAME
$namespaces = "ROOT\SecurityCenter", "ROOT\SecurityCenter2"
$classname = "FirewallProduct"
$ActiveFireWall = foreach ($namespace in $namespaces) {
$aux = Get-WmiObject -Class $classname -Namespace $namespace -ComputerName $computer
if ($aux) {
$aux | Select-Object -Property [a-z]* -ExcludeProperty PSComputerName,
Scope, Path, Options, ClassPath, Properties, SystemProperties,
Qualifiers, Site, Container
}
}
if ( $ActiveFireWall ) { $ActiveFireWall.displayName }