📝

今週の始まりと終わりの日付を求めたい

2024/09/23に公開

今週の始まりと終わりの日付を求めたい

ポイントは

  • date +%w コマンドで今日 (基準日) の曜日を 0 ~ 6 のインデックスで求める。
  • 週の開始曜日の定義に基づいて、今週の最初の日と最後の日をインデックスに基づく足し算、引き算を行って目的の日を求める。

が日曜日から始まって、土曜日で終わる場合

#!/bin/bash

# 引数から日付を取得、引数がなければ今日の日付を使用
today=${1:-$(date +%Y-%m-%d)}

# 今日の曜日をインデックスで取得 (0:日曜日, 1:月曜日, ..., 6:土曜日)
# %u     day of week (1..7); 1 is Monday
# %w     day of week (0..6); 0 is Sunday
today_index=$(date -d $today +%w)

# 今週の日曜日の日付を計算 (今日のインデックスを引く)
sunday=$(date -d "$today - $today_index days" +%Y-%m-%d)

# 今週の土曜日の日付を計算 (日曜日から6日後)
saturday=$(date -d "$sunday + 6 days" +%Y-%m-%d)

# 結果を表示
echo "基準の日付: $today"
echo "今週の日曜日: $sunday"
echo "今週の土曜日: $saturday"

2024/9/23 (月) に実行した場合

$ ./day.sh
基準の日付: 2024-09-23
今週の日曜日: 2024-09-22
今週の土曜日: 2024-09-28

2024-09-22 を渡した場合

$ ./day.sh 2024-09-22
基準の日付: 2024-09-22
今週の日曜日: 2024-09-22
今週の土曜日: 2024-09-28

2024-09-28 を渡した場合

 $ ./day.sh 2024-09-28
基準の日付: 2024-09-28
今週の日曜日: 2024-09-22
今週の土曜日: 2024-09-28

が月曜日から始まって、日曜日で終わる場合

#!/bin/bash

# 引数から日付を取得、引数がなければ今日の日付を使用
today=${1:-$(date +%Y-%m-%d)}

# 今日の曜日をインデックスで取得 (1:月曜日, ..., 7:日曜日)
today_index=$(date -d $today +%u)

# 今週の月曜日の日付を計算 (今日のインデックスから1を引いて日数を調整)
monday=$(date -d "$today - $((today_index - 1)) days" +%Y-%m-%d)

# 今週の日曜日の日付を計算 (月曜日から6日後)
sunday=$(date -d "$monday + 6 days" +%Y-%m-%d)

# 結果を表示
echo "基準の日付: $today"
echo "今週の月曜日: $monday"
echo "今週の日曜日: $sunday"

2024-09-22 (日) を渡した場合

$ ./day2.sh 2024-09-22
基準の日付: 2024-09-22
今週の月曜日: 2024-09-16
今週の日曜日: 2024-09-22

2024-09-23 (月) を渡した場合

$ ./day2.sh 2024-09-23
基準の日付: 2024-09-23
今週の月曜日: 2024-09-23
今週の日曜日: 2024-09-29

2024-09-28 (土) を渡した場合

$ ./day2.sh 2024-09-28
基準の日付: 2024-09-28
今週の月曜日: 2024-09-23
今週の日曜日: 2024-09-29

2024-09-29 (日) を渡した場合

$ ./day2.sh 2024-09-29
基準の日付: 2024-09-29
今週の月曜日: 2024-09-23
今週の日曜日: 2024-09-29

Discussion