날짜가 n년이 되었는지 확인하세요.

날짜가 n년이 되었는지 확인하세요.

yyyy-mm-dd 형식의 $date 변수가 있는데 정확히 1년, 2년 등인지 확인하고 싶습니다.

이것이 내가 지금까지 시도한 것입니다:

dates=$(echo $date | cut -c6-10)
todays=$(date +"%m-%d")
if [ $todays == $dates ]; then
        echo "$path;$date;$time;$gps" >>$databasematch
else
        :
fi

답변1

변수를 가정하고 $today오늘 $date날짜와 확인하려는 날짜를 각각 보유합니다.

날짜를 두 번째 해상도로 변환할 필요가 없으며 비교의 날짜에서 아무것도 빼거나 추가할 필요가 없습니다. 또한 GNU 날짜는 오늘 날짜를 알 수 있으므로( $today제거할 수 있음) 인용이 약간 혼란스럽습니다.

다음은 1년 전 버전인지 확인하는 방법입니다 $then_date(내 시스템에서는 GNU 날짜라고 함 gdate).

then_date="2019-09-17"

if [[ $( gdate -d "now -1 year" +"%Y-%m-%d" ) == "$then_date" ]]; then
    echo "YES"
else
    echo "NO"
fi

날짜 사이의 연도 수를 원하는 경우 먼저 연도 없이 날짜를 비교한 다음 연도 차이를 출력하면 됩니다.

if [[ $( gdate +"%m%d" ) == $( gdate -d "$then_date" +"%m%d" ) ]]; then
    now_year=$( gdate +"%Y" )
    then_year=$( gdate -d "$then_date" +"%Y" )

    printf "'%s' is today, but %d years ago\n" \
        "$then_date" "$(( now_year - then_year ))"

else
    echo "Not same day"
fi

편집하다: 문제가 변경되었습니다. 이제 더 나은 방법이 있는지 묻습니다.

dates=$(echo $date | cut -c6-10)
todays=$(date +"%m-%d")
if [ $todays == $dates ]; then
        echo "$path;$date;$time;$gps" >>$databasematch
else
        :
fi

바로 여기에:

now_day=$( gdate +"%m%d" )

echo "$date" | 
while read then_date; do
    then_day=$( gdate -d "$then_date" +"%m%d" )
    if [[ "$now_day" == "$then_day" ]]; then
        echo "$path;$date;$time;$gps"
    fi
done >$databasematch

echo "$date"이렇게 하면 해당 비트를 날짜를 생성하는 항목으로 대체하려는 경우 변수로 많은 데이터를 읽는 것을 방지할 수 있습니다.

관련 정보