如何修改以下代码以识别过去一周(而不是下一周)中最近的星期五,但要使用格式?
$Date = @(@(0..7) | % {$(Get-Date).AddDays($_)} | ? {$_.DayOfWeek -ieq "Friday"})[0]
来源:https://stackoverflow.com/a/23939203/5651418
您链接到的文章提供了一个更优雅的解决方案,您可以按照以下方式调整:
# Get the most recent Friday relative to the given date,
# which may be that date itself.
$mostRecentFriday =
($date = Get-Date).AddDays((-7 - $date.DayOfWeek + [DayOfWeek]::Friday) % 7)
如果您想创建一个格式化的字符串表示结果[datetime]
实例(下面的所有示例产生类似'07 01 2022'
:
要使用Unix样式的格式说明符,请使用
Get-Date
的-UFormat
参数:Get-Date $mostRecentFriday -UFormat '%d %m %Y'
要使用。net的格式说明符,使用
Get-Data
的-Format
参数:Get-Date $mostRecentFriday -Format 'dd MM yyyy'
或者,将格式字符串传递给
[datetime]
实例的.ToString()
方法$mostRecentFriday.ToString('dd MM yyyy')
如果我理解正确,您的预期输出将是1 7 2022
,我个人会使用do
循环,只要DateTime
实例的DayOfWeek
属性是Friday
:
$date = [datetime]::Now
do {
$date = $date.AddDays(-1)
} until($date.DayOfWeek -eq [DayOfWeek]::Friday)
$date.ToString("d M yyyy")
我注意到,当试图将一些Get-Date -UFormat说明符合并到输出字符串中时,它们似乎不起作用。
如果有人需要合并一些很少需要的变量(如' Year of Week ' (%G), 'Day of Year (%j)等),您可以预设需要的变量并将它们添加到输出字符串中:
$DayOfYear = (Get-Date -UFormat %j)
$WeekOfYear = (Get-Date -UFormat %V)
$Date = @(@(0..7) | % {$(Get-Date).AddDays(-$_)} | ? {$_.DayOfWeek -ieq "Wednesday"})[0].ToString("MM-dd-yyyy|Week $WeekOfYear|'Day' $DayOfYear")
我想有人可以把所有的代码合并到一个Powershell命令中。
附加Get-Date -UFormat说明符:https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/get-date?view=powershell-7.2#notes