$ SAT=$(date -dsaturday +%Y-%m-%d)
$ SUN=$(date -dsunday +%Y-%m-%d)
$
$ echo $SAT
2016-04-09
$ echo $SUN
2016-04-10
$
私は土曜日と日曜日の次の日付をリストする方法を知っています。
次の6ヶ月間、次の土曜日と日曜日の両方をリストする方法は?
Ubuntuでbashを使用しています。
答え1
土曜日および/または日曜日の最初の開始日を決定したら、相対日付を使用するbashスクリプトのループを使用してこれを実行できます。
#!/bin/bash
SAT=$(date -dsaturday +%Y-%m-%d)
SUN=$(date -dsunday +%Y-%m-%d)
# 365 days/year / 2 ~= 182 days
ENDSAT=$(date -d "$SAT + 182 days" +"%Y-%m-%d")
ENDSUN=$(date -d "$SUN + 182 days" +"%Y-%m-%d")
echo $SAT
echo $SUN
until [ "$SUN" == "$ENDSUN" ]; do
SAT=$(date -d "$SAT + 7 days" +%Y-%m-%d)
SUN=$(date -d "$SUN + 7 days" +%Y-%m-%d)
echo $SAT
echo $SUN
done
初期設定では「+6ヶ月」は使用しません。月ごとに日数が異なるため、作業日が多少異なる場合があります。
答え2
人が読める形式で週末を表示する最も簡単な方法は次のとおりです。
cal -A6
これは以下を印刷します剣つなぎ:
2016
April May June
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 1 2 3 4 5 6 7 1 2 3 4
3 4 5 6 7 8 9 8 9 10 11 12 13 14 5 6 7 8 9 10 11
10 11 12 13 14 15 16 15 16 17 18 19 20 21 12 13 14 15 16 17 18
17 18 19 20 21 22 23 22 23 24 25 26 27 28 19 20 21 22 23 24 25
24 25 26 27 28 29 30 29 30 31 26 27 28 29 30
July August September
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 1 2 3 4 5 6 1 2 3
3 4 5 6 7 8 9 7 8 9 10 11 12 13 4 5 6 7 8 9 10
10 11 12 13 14 15 16 14 15 16 17 18 19 20 11 12 13 14 15 16 17
17 18 19 20 21 22 23 21 22 23 24 25 26 27 18 19 20 21 22 23 24
24 25 26 27 28 29 30 28 29 30 31 25 26 27 28 29 30
31
October
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
リストが必要な場合ただ土曜日と日曜日:
nextsat="$(date -d "next sat" +%Y-%m-%d)"
for i in {0..26}; do
date -d "$nextsat +$((i*7)) day" +%a-%Y-%m-%d
date -d "$nextsat +$((i*7+1)) day" +%a-%Y-%m-%d
done
6ヶ月(半年)の範囲は(およそ)~182日も、特別な事情がない限り26週です。だから{0..26}
。今週は26週間残り0週目です。厳密に26週間が必要な場合は{0..25}を使用してください。
答え3
#!/bin/bash
WEEK=0
END_MONTH=$((`date -d "6 months" +%m` + 1)) |sed 's/^0//'
while true; do
CURRENT_MONTH=`date -d "$WEEK weeks" +%m`|sed 's/^0//'
if [[ $CURRENT_MONTH -ne $END_MONTH ]]; then
date -d "$WEEK weeks saturday" +%Y-%m-%d
date -d "$WEEK weeks sunday" +%Y-%m-%d
else
#$END_MONTH reached... exiting
exit 0
fi
let "WEEK++"
done