Powershell -查找最新的星期五



如何修改以下代码以识别过去一周(而不是下一周)中最近的星期五,但要使用格式?

$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

最新更新