Powershell更新日期

时间:2016-05-02 15:27:46

标签: powershell

我有一个数月的阵列。现在我想用日期更新一个字段,但我不想为此创建12个不同的if语句。我的另一个选择是什么? (我写的代码有效,但试图最小化行数)

例如,

if(month=1)
{ $item["RequestDate"] = "1/31/2016"}
if(month=2)
{...}
if(month=3)
{...}

实际代码

$MonthArray = @("1", "2", "3", "4", "5", "6")

for($i=0; $i -lt $MonthArray.length; $i++)
{
   if($i="1")
   {
     $item["RequestedDate"] = "01/31/2016"
   }

}

2 个答案:

答案 0 :(得分:2)

您可以使用字符串格式插入月份,但请注意,31。feb +这些日期中的一些日期并不存在。

$MonthArray = @(1, 2, 3, 4, 5, 6)

for($i=0; $i -lt $MonthArray.length; $i++)
{
    #$item["RequestedDate"] = "{0:00}/31/2016" -f $MonthArray[$i]
    "{0:00}/31/2016" -f $MonthArray[$i]
}

输出:

01/31/2016
02/31/2016
03/31/2016
04/31/2016
05/31/2016
06/31/2016

或使用datetime-objects。这将失败,日期无效,所以我每个月使用16.:

$MonthArray = @(1, 2, 3, 4, 5, 6)

for($i=0; $i -lt $MonthArray.length; $i++)
{
    #$date = [datetime]"$($MonthArray[$i])/16/2016"
    $date = New-Object datetime -ArgumentList 2016, ($MonthArray[$i]), 16
    $date.ToString("MM/dd/yyyy", [cultureinfo]::InvariantCulture)
}

答案 1 :(得分:2)

这样做的一种方法是

$MonthArray = @("1", "2", "3", "4", "5", "6")
$year = '2016'

foreach ($month in $MonthArray) {

$start_date = Get-Date -Format 'MM/dd/yyyy' -Day  ([datetime]::DaysInMonth($year, $month)) -Month $month -Year $year
$start_date
}

此代码假定您感兴趣的日期是月份和今年的最后一天。如果您需要更多月份,这仍然可以在$ MonthArray变量中扩展,但是多年来这将需要额外的循环。