해당 달의 이전 주의 번호가 필요합니다.
3월 둘째 주에 이전 주는 1이 됩니다. 4월 첫째 주에 이전 주는 5가 됩니다.
나의 일주일은 월요일부터 시작된다.
WEEK=$(( 1 + $(date +%V) - $(date -d "$(date -d "-$(($(date +%d)-1)) days")" +%V) ))
이전 주를 얻기 위해 여기에서 1을 빼려면 어떻게 해야 합니까(주가 1이면 예외가 있으므로 신경 쓸 필요가 없습니다).
4주만 남은 2월도 자동으로 인식되면 좋을 것 같습니다.
답변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일"과 같은 표현을 구문 분석할 수 있는지 여부에 달려 있습니다. 앞에 0이 붙은 주 번호 < 10을 인쇄합니다. 이로 인해 8진수, 줄바꿈 및 date +%V
로 해석됩니다 . bash가 숫자를 십진수로 사용하도록 하려면 를 추가하세요 .08
09
10#
같은 달의 첫날을 얻는 조금 더 짧은 방법은 다음과 같습니다.
first=$(date -d "$now" +"%Y-%m-01")
(형식은 다르지만 date
해석할 수 있어야 합니다.)