매월 첫째 주에 대한 번호가 필요합니다.
3월 둘째주에는 전주가 1이 됩니다. 4월 첫째주에는 그 전 주가 5가 됩니다.
나의 일주일은 월요일부터 시작된다.
WEEK=$(( 1 + $(date +%V) - $(date -d "$(date -d "-$(($(date +%d)-1)) days")" +%V) ))
이전 주의 값을 얻기 위해 여기에서 1을 빼려면 어떻게 해야 합니까(해당 주가 1이면 예외가 있으므로 신경 쓸 필요가 없습니다).
2월이 4주밖에 안남았음을 자동으로 인식하면 좋을 것 같습니다.
답변1
제 기억이 맞다면 (여기서 약간 재구성한) 귀하의 표현식은 해당 월의 1일에 해당하는 주 번호, 오늘에 해당하는 주 번호를 찾아 그 차이를 월별 주 번호로 계산합니까?
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을 앞에 0으로 인쇄하면 8진수로 해석되어 08
합계가 깨집니다 09
. 10#
bash가 십진수를 사용하도록 강제하기 위해 추가되었습니다 .
같은 달의 첫날을 얻는 더 짧은 방법:
first=$(date -d "$now" +"%Y-%m-01")
(형식은 다르지만 date
설명이 가능해야 합니다.)