检查日期是否为 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 date 会知道今天的日期(因此$today可以删除),并且引用有点混乱。

这是一个检查是否是一年前的版本$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"如果您打算用生成日期的任何内容替换该位,这可以避免将大量数据读入变量。

相关内容