2016-05-02 2 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 

Или с помощью DateTime-объекты. Это будет терпеть неудачу с недопустимыми датами, поэтому я использовал 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

Нет проблем. Вы также можете использовать однострочный код, но читабельность> короткий код. :-) –

Смежные вопросы