2016-05-02 124 views
0

我有一個有數月的數組。現在我想用日期更新一個字段,但我不想爲此創建12個不同的if語句。我的其他選擇是什麼? (代碼我寫的作品,但試圖儘量減少行號)Powershell更新日期

例如,

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

的一種方式做,這是這個

$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變量內擴展,但是多年以後這將需要額外的循環。

+0

WOW。完善。謝謝你,馬丁。從來沒有想過會這麼簡單。 –

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 

或使用日期時間的對象。這將失敗,無效的日期,所以我用了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) 
} 
+0

感謝您的發佈。我只是用馬丁的帖子,因爲它更短。再次感謝投球。 –

+0

沒問題。你也可以單行,但可讀性>短代碼。 :-) –