GNU Dateを使用して、特定の日付より2週間前の月曜日の日付を取得します。

GNU Dateを使用して、特定の日付より2週間前の月曜日の日付を取得します。

私はコマンドが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週間前の月曜日になるように選択しました。-ddate

上記のスクリプトでは、オプションパラメータに使用される実際の文字列-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

おすすめ記事