Powrshell上で日付データをyyyyMMdd形式として変数で扱う方法をまとめてみました。
また、日付データの減算、加算方法も試してみました。
日付データをyyyyMMdd形式で扱う
「date」「Get-date」利用時の日付データ形式について
powershell上で「date」「Get-date」などで日付データを取得すると、通常であれば以下のような形式で取得されます。
PS C:\> date
2022年3月28日 10:05:59
PS C:\> get-date
2022年3月28日 10:06:09
今回はこの出力をyyyyMMdd形式として変数に格納していきます。
オプション「-Format “yyyyMMdd”」をつけて実行
「date」や「Get-date」にオプションとして「-Format “yyyyMMdd”」をつけて実行させることでyyyyMMdd形式の日付データを取得することができます。
$get_date = Get-Date -Format "yyyyMMdd"
$get_date
もしくは
$date = date -Format "yyyyMMdd"
$date
実際にオプションをつけて実行してみる
「$get_date」と「$date」にyyyyMMdd形式で日付が格納されていることが確認できます。
・Get-dateコマンドを利用した実行結果
PS C:\> $get_date = Get-Date -Format "yyyyMMdd"
PS C:\>
PS C:\> $get_date
20220203
PS C:\>
・dateコマンドを利用した実行結果
PS C:\> $date = date -Format "yyyyMMdd"
PS C:\>
PS C:\> $date
20220203
PS C:\>
指定した日付データを取得する
以下のように [Add・・・]メソッドを利用することで指定した日付データを取得することができます。
以下では1週間前の日付情報を取得しています。
PS C:\> $date_lastweek = Get-Date(Get-Date).AddDays(-7) -Format "yyyyMMdd"
PS C:\>
PS C:\> $date_lastweek
20220127
PS C:\>
このほかにも以下のメソッドが用意されています。
PS C:\> $Seconds = Get-Date(Get-Date).AddSeconds(1) # 1秒後
PS C:\> $Minutes = Get-Date(Get-Date).AddMinutes(1) # 1分後
PS C:\> $Hours = Get-Date(Get-Date).AddHours(1) # 1時間前
PS C:\> $Days = Get-Date(Get-Date).AddDays(1) # 1日前
PS C:\> $Months = Get-Date(Get-Date).AddMonths(1) # 1か月後
PS C:\> $Years = Get-Date(Get-Date).AddYears(1) # 1年後
PS C:\>
PS C:\> $Seconds
2022年2月3日 20:43:28
PS C:\> $Minutes
2022年2月3日 20:44:27
PS C:\> $Hours
2022年2月3日 21:43:27
PS C:\> $Days
2022年2月4日 20:43:27
PS C:\> $Months
2022年3月3日 20:43:27
PS C:\> $Years
2023年2月3日 20:43:27
PS C:\>
過去の日付を扱うときの注意点(日付データの減算・加算について)
私も一度やってしまったことがあるのですが、日付を整数型のように「数字」として扱い、単なる減算のように処理してしまうと想定外の動作となることがあります。
PS C:> $date = Get-Date -Format "yyyyMMdd"
PS C:> $date_lastweek = $date -7
PS C:> $date_lastweek
20220196
PS C:>
1行目の変数「$date」で取得した値には [20220203] が格納されますが、これが「20220203」という数字(=2千22万2百3)として扱われます。
2行目で、「20220203」という数字から7を引くことになるので「2千22万百96」となってしまいます。
なので上記でも記載している通り、過去の日付を取得する場合は [Add・・・]メソッドを利用して日付を取得する必要があります。