Как найти следующий рабочий день с powershell?Powershell Golf: Следующий рабочий день
ответ
Это довольно короткий тоже (но использует псевдонимы):
,(1,2-eq7-(date).dayofweek)|%{(date)+"$(1+$_[0])"}
В один один оператор:
(date)+"$(1+$(@(1,2-eq7-(date).dayofweek)))"
Несколько замечаний по поводу такого подхода:
В Powershell (по крайней мере, v1), сравнения wi й коллекции возвращают элементы, где условие истинно, например:
PS> 1,2 -eq 1
PS> 1
Я, пользуясь тем, что фактические исключения из этого правила
today + 1
для расчета на следующий рабочий день только Пятница (+3 дня) и суббота (+2 дня).
Ну, мой телефон позволяет мне установить, какие дни являются рабочими днями, но Windows/.NET не будет, поэтому я предполагаю, что с понедельника по пятницу.
Примечание: Поскольку вопрос включает в себя «гольф», я играю в гольф на этом, который пытается использовать как можно меньше байтов для сценария. В результате код не обязательно читается.
Самый простой и самый простой способ сделать это было бы начать с сегодняшнего дня, добавьте в день и посмотреть, является ли он в розыске диапазона:
PS> $d = [DateTime]::Now.AddDays(1); while ($d.DayOfWeek -eq "Saturday" -or $d.DayOfWeek -eq "Sunday") { $d = $d.AddDays(1) }; $d
Montag, 22. Juni 2009 19:50:27
Мы можем сократить, что немного, хотя:
PS> $d=(Get-Date)+"1";for(;6,0-contains$d.DayOfWeek){$d+="1"}$d
Montag, 22. Juni 2009 19:52:31
Но мы также можем попробовать по-другому, используя трубопровод. На следующий рабочий день, по крайней мере один и не более трех дней вдали, так что мы можем создать список возможных дат и фильтровать их, соответственно, и, наконец, выберите первый:
PS> @(1..3|%{(Get-Date).AddDays($_)}|?{$_.DayOfWeek -ge "Monday" -and $_.DayOfWeek -le "Friday"})[0]
Montag, 22. Juni 2009 22:11:19
или короче:
PS> @(1..3|%{(Get-Date)+"$_"}|?{1..5-contains$_.DayOfWeek})[0]
Montag, 22. Juni 2009 19:55:53
позволяя диапазон идти до 4 мы можем гарантировать, что она всегда возвращает по крайней мере, два трудодня и сохранить оператор @, чтобы заставить массив:
PS> (1..4|%{(Get-Date)+"$_"}|?{1..5-contains$_.DayOfWeek})[0]
Montag, 22. Juni 2009 20:24:06
Вот еще один способ pipline:
(@(1..4) | foreach { if (([datetime]::Now.AddDays($_)).DayOfWeek -ne "Sunday" -and ([datetime]::Now.AddDays($_)).DayOfWeek -ne "Saturday") {[datetime]::Now.AddDays($_); }})[0]
Не знаю, почему я должен использовать (1..4) вместо (1..3).
Ну, это очевидно. Если текущий день - пятница, вы получаете только один результат назад (следующий понедельник), который будет возвращен как один объект, а не как массив, поэтому вы не можете индексировать его с помощью [0]. Когда вы используете 1..4 (вы можете отбросить @() вокруг этого, кстати), вы получаете две даты, то есть массив, в котором вы можете выбрать первый. Другим вариантом было бы поставить @() вокруг полного оператора (см. Мой ответ), чтобы заставить массив (даже с одним элементом), где вы снова можете использовать [0]. – Joey
Я нашел образец кода в первом ответе очень трудным для подражания, поэтому я переписал его, чтобы немного узнать, что происходит. Я все еще использую поведение -eq, где -eq test вернет соответствующее значение.
$date = get-date "2013 Apr 24"
write-host "Based on your date"
$date
write-host "next business day (skipping saturday and sunday)"
$Date.AddDays(1 + $(1,2 -eq 7 - [int]$date.dayofweek))
write-host "Next week monday"
$Date.AddDays(1 + $(0,1,2,3,4,5,6,7 -eq 7 - [int]$date.dayofweek))
- 1. Как получить следующий рабочий день в powershell
- 2. Momentjs Следующий рабочий день
- 3. Как найти следующий рабочий день
- 4. Чтобы найти следующий рабочий день
- 5. Datetime Python - Следующий рабочий день
- 6. Расчет на следующий рабочий день
- 7. Установить следующий/предыдущий рабочий день
- 8. Vba Следующий рабочий день Включая праздник
- 9. Как найти следующий рабочий день: MATLAB
- 10. Oracle SQL 11g - следующий рабочий день запрос
- 11. получение даты на следующий рабочий день
- 12. следующий рабочий день даты дате в oracle
- 13. Дата начала, а на следующий рабочий день:
- 14. Как получить предыдущий рабочий день в команде windows (через powershell)
- 15. Параметр SSRS - по умолчанию на следующий рабочий день
- 16. На следующий рабочий день, за исключением праздничных дней
- 17. Нужно найти следующий и предыдущий рабочий день в оракула
- 18. dplyr: mutate найти и найти следующий рабочий день?
- 19. Как рассчитать следующий, предыдущий рабочий день в Rails?
- 20. находка на следующий рабочий день в колонке панд
- 21. Начать рабочий день каждый день
- 22. SQL Последний рабочий день
- 23. Получить предыдущий рабочий день
- 24. VBA - Рабочий день-1
- 25. между java.time.LocalTime (на следующий день)
- 26. Проверка на следующий день
- 27. Анализ «на следующий день»
- 28. Полный рабочий день календаря
- 29. Получить предыдущий рабочий день
- 30. Hibernate HQL выбрать следующий рабочий день после того, как данный год, месяц и день
отлично, это должен быть правильный ответ, но мне нужно было это быстро ... Я новичок powerhell; не знал для псевдонима даты :) – m1k4
Я буду звучать как задница, но вы можете изменить принятый ответ в любое время на SO. Вы можете также подождать, так как, возможно, кто-то еще придумает еще более компактный onliner. Некоторые разработчики из Microsoft Powershell Team тоже находятся на SO ... – guillermooo
Вы правы, это правильный ответ, поэтому заголовок вопроса – m1k4