📝
今週の始まりと終わりの日付を求めたい
今週の始まりと終わりの日付を求めたい
ポイントは
-
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