2017-04-11 16 views
1

私は現在の日付に23ヶ月を追加するが、その日を最初に設定するにはpowershell関数が必要です。私は日を引くためにwhileループを試みたが、運がなかった。私は、月の部分が考え出したが、私はその-Day-Month-Yearを経由して指定した日付(のコピー)のコンポーネントを調整することができ、一定1.Powershellの日付関数の問題

function Update-Date { 
    $current = Get-Date 
    $current.AddMonths(11) 
    $current.AddYears(1) 
    $current.Day(1) 

} 

答えて

1

それを行うには、より良く、より簡潔な方法があります(mklement0の回答を参照してください。(ファンクションその出力結果の日付に注意してくださいPowerShellのの命名規則との整合性を保つために改称)あなたの関数に包ま

)が、学習の機会として、これを試してみてください。

$val = Update-Date 
Write-Host $val 

function Update-Date { 
    $current = Get-Date 
    $current = $current.AddMonths(11) 
    $current = $current.AddYears(1) 
    $current = $current.AddDays(-($current.Day) + 1) 
    return $current 
} 

お知らせなどAddMonths、AddYears、AddDays、ということは、元の日付を変更し、代わりに新しいものを返しません。毎回それを保管し、次の操作を実行する必要があります。ループするのではなく、月の現在の日を減算し、1を戻して月の1日に戻すことができます。 return文とコードを追加して画面に出力しました。必要ない場合は無視することができます。

+0

これは '[System.DateTime]'についての良い情報ですが、ホスト(端末)に直接書き込むのではなく 'Write-Host'(' $ val'を使って_success_ストリームに出力してください) )や 'return'(同様に' $ current'を使って値を出力します)、PowerShellの反学習機会にはなりません。 – mklement0

+0

技術的には、技術的には 'return $ current'を行うことに何も問題はありません。それはちょうど本当にパワーウィッシュではありません。 – 4c74356b41

+0

@ 4c74356b41:' 'powershellish ''ではないということはまさに私の要点です。' 'Write-Host' PowerShellの出力がどのように機能するかについての誤解に基づいていると思われます。現在書かれているように、このコードはPowerShellに関するよくある誤解を補強しています。 – mklement0

5

Get-Date cmdletに$のcurrent.dayを設定する必要がありますパラメータ(および同様の時間部分のため)ので、次のことを試してください。

Get-Date -Day 1 (Get-Date).Date.AddMonths(23) 

日から時刻部分を除去.Dateの使用は、注意してください。

function Get-UpdateDate { Get-Date -Day 1 (Get-Date).Date.AddMonths(23) }