web-dev-qa-db-ja.com

前週の番号をbashで取得する

その月の前の週の番号が必要です。

3月の第2週では、前の週は1になります。4月の第1週では、前の週は5になります。

私の週は月曜日から始まります。

WEEK=$(( 1 + $(date +%V) - $(date -d "$(date -d "-$(($(date +%d)-1)) days")" +%V) ))

前の週を取得するために、これから1を引くにはどうすればよいですか(週が1の場合、例外があるので、気にする必要はありません)。

たった4週間の2月が自動的に認識されるのもいいですね。

4
MadMax

私が間違っていなければ、あなたの表現(ここで少し再編成されています)は、現在の月の最初の日に対応する週番号、今日に対応する週番号を見つけ、その差を月の週として計算しますか?

first=$(date -d "-$(($(date +%d)-1)) days")
weekofmon=$(( 1 + $(date +%V) - $(date -d "$first" +%V) ))

そうで、先週の月が必要な場合は、「今日」を「7日前」(すべての場所)に置き換えて、対応する月を取得するだけで十分ではありません。その日?

now="7 days ago"
first=$(date -d "$now - $(($(date +%d -d "$now" )-1)) days")
weekofmon=$(( 1 + 10#$(date +%V -d "$now") - 10#$(date -d "$first" +%V) ))

dateが「7日前-3日前」のような式を解析できることに依存しています。 date +%Vは、先頭にゼロが付いた10未満の週番号を出力します。これにより、それらは8進数として解釈され、0809が壊れます。 10#を追加して、bashに10進数の数値を強制的に取得させます。

同じ月の最初の日を取得するための少し短い方法:

first=$(date -d "$now" +"%Y-%m-01") 

(形式は異なりますが、dateはそれを解釈できるはずです。)

3
ilkkachu