私はコマンドがdate -d 'last-monday - 14 days' +%Y%m%d
「今日の日付」から2週間前の月曜日を印刷することを知っています。さまざまな日に状況をテストして結果を確認する方法が必要です。相対日付を計算するには、dateコマンドに言及する必要があるようです。
次のようなさまざまな日付をテストするには何かが必要です。
date -d 'last-monday - 14 days' %Y%m%d from 20190315
date -d 'last-monday - 14 days' %Y%m%d from 20180217
date -d 'last-monday - 14 days' %Y%m%d from 201700914
そして、対応する出力を表示します。
ベストアンサー1
#!/bin/bash
# Our given dates
dates=(
20190315
20180217
20170914
)
# Loop over the given dates
for thedate in "${dates[@]}"; do
# Get day of the week as digit (1 is Monday, 7 is Sunday)
day=$( date -d "$thedate" +%u )
# The Monday the same week is $(( day - 1 )) days earlier than the given date.
# The Monday two weeks earlier is 14 days earlier still.
date -d "$thedate -$(( day - 1 + 14 )) days" +"$thedate --> %Y%m%d"
done
出力:
20190315 --> 20190225
20180217 --> 20180129
20170914 --> 20170828
--date
難しいのは、GNUが最終日を計算するために正しい文字列を作成する方法を見つけることです。私は与えられた日付の曜日を計算し、それを使って与えられた日付を数日間オフセットする日付文字列を計算し、結果の日付が2週間前の月曜日になるように選択しました。-d
date
上記のスクリプトでは、オプションパラメータに使用される実際の文字列-d
(スクリプトで指定された日付を使用)は次のとおりです。
20190315 -18 days
20180217 -19 days
20170914 -17 days
単一の日付に対して計算を実行する単一のコマンドでスクリプトを圧縮します$thedate
。
date -d "$thedate -$(date -d "$thedate" +%u) days -13 days" +%Y%m%d
または
date -d "$thedate -$(date -d "$thedate" +"-%u days -13 days")" +%Y%m%d