【发布时间】:2021-03-24 22:58:14
【问题描述】:
给定开始日期和时间(星期五下午 5 点)和结束日期和时间(星期一凌晨 5 点),如何使用 PowerShell 确定今天是否介于两者之间?我完全不知所措。
谢谢
【问题讨论】:
标签: powershell datetime
给定开始日期和时间(星期五下午 5 点)和结束日期和时间(星期一凌晨 5 点),如何使用 PowerShell 确定今天是否介于两者之间?我完全不知所措。
谢谢
【问题讨论】:
标签: powershell datetime
假设本地时间戳:
如果你定义了这个函数:
function Test-TimeWindow {
param(
[Parameter(Mandatory)] [DateTime] $TimeStamp,
[Parameter(Mandatory)] [DayOfWeek] $FromDay,
[timespan] $FromTime = '00:00',
[Parameter(Mandatory)] [DayOfWeek] $ToDay,
[timespan] $ToTime = '00:00'
)
$interveningFullDays = [int] $ToDay + (0, 7)[[int] $FromDay -gt [int] $ToDay] - $FromDay - 1
[dayofweek[]] $interveningFullDoWs =
if ($interveningFullDays -gt 0) {
foreach ($i in 1..$interveningFullDays) {
([int] $FromDay + $i) % 7
}
}
$TimeStamp.DayOfWeek -in $interveningFullDoWs -or
($TimeStamp.DayOfWeek -eq $FromDay -and $TimeStamp.TimeOfDay -ge $FromTime) -or
($TimeStamp.DayOfWeek -eq $ToDay -and $TimeStamp.TimeOfDay -le $ToTime)
}
你可以这样称呼它:
# Outputs $true if the current point in time falls inside the specified window.
# Note:
# * '17:00' is the 24-hour-clock representation of 5 PM
# Both times must be represented in this format.
# * Day-of-week names can be abbreviated, as long as the abbrevation
# is unambiguous.
Test-TimeWindow (Get-Date) Fri 17:00 Mon 05:00
【讨论】:
如果你有/可以计算出合适的日期,那么你可以测试它是否小于和大于。
$today = Get-Date
$monday = Get-Date '03-29-2021 07:00'
$friday = Get-Date '03-26-2021 17:00'
$today -le $monday -and $today -ge $friday # returns false for today 03-24-2021
测试条件内的实际日期/时间
$testday = Get-Date '03-28-2021 19:33'
$testday -lt $monday -and $testday -gt $friday # returns true
【讨论】:
-le & -ge。在这种情况下,它将覆盖用户在窗口打开或关闭时精确指定时间的边缘情况。
function IsTodayInbetween($startDay, $startTime, $endDay, $endTime) {
$date = Get-Date
$time = (Get-Date).TimeOfDay;
$startTimeFormatted = [datetime]::ParseExact($startTime, "h tt", $null).TimeOfDay;
$endTimeFormatted = [datetime]::ParseExact($endTime, "h tt", $null).TimeOfDay;
$daysToStart = 0;
if ($date.AddDays($daysToStart).DayOfWeek -ne $startDay) {
do { $daysToStart++; } while ($date.AddDays($daysToStart).DayOfWeek -ne $startDay);
}
$daysToEnd = 0
if ($date.AddDays($daysToEnd).DayOfWeek -ne $endDay) {
do { $daysToEnd++; } while ($date.AddDays($daysToEnd).DayOfWeek -ne $endDay)
}
if ($daysToEnd -gt $daysToStart -And $daysToStart -ne 0) { return $false }
if (($daysToStart -eq 0 -And $time -lt $startTimeFormatted)) {
return $false;
}
if (($daysToEnd -eq 0 -And $time -gt $endTimeFormatted))
{
return $false;
}
return $true;
}
write-host "Is Todays date inbetween ? $((IsTodayInbetween -startDay 'Monday' -startTime '5 AM' -endDay 'Friday' -endTime '5 PM'))";
write-host "Is Todays date inbetween ? $((IsTodayInbetween -startDay 'Thursday' -startTime '5 AM' -endDay 'Thursday' -endTime '5 PM'))";
write-host "Is Todays date inbetween ? $((IsTodayInbetween -startDay 'Monday' -startTime '5 AM' -endDay 'Friday' -endTime '5 PM'))";
write-host "Is Todays date inbetween ? $((IsTodayInbetween -startDay 'Friday' -startTime '5 AM' -endDay 'Monday' -endTime '5 PM'))";
write-host "Is Todays date inbetween ? $((IsTodayInbetween -startDay 'Saturday' -startTime '5 AM' -endDay 'Sunday' -endTime '5 PM'))";
write-host "Is Todays date inbetween ? $((IsTodayInbetween -startDay 'Thursday' -startTime '2 PM' -endDay 'Monday' -endTime '5 PM'))";
write-host "Is Todays date inbetween ? $((IsTodayInbetween -startDay 'Saturday' -startTime '5 AM' -endDay 'Friday' -endTime '5 PM'))";
【讨论】: