Search code examples
bashvariablesdatecompare

Bash script compare two date variables


I'm trying to compare a date given by a user to a date in a file, basically a text file with lots of dates and times listed.

for example the user would enter a date such as 22/08/2007 and a time of 1:00, what i need the script to do is count how many dates in the text file are after the date given by the user.

I’ve managed to accomplish this by converting each date in the text file to unix timestamp and then comparing the two. Is there no way of simply comparing two dates in bash?

Thanks in advance


Solution

  • The GNU date command can convert a date into the number of seconds since 1970. Try this script:

    #! /bin/bash
    DATE=$(date -d "$3-$2-$1 01" '+%s')
    COUNT=0
    tr '/' ' ' | {
        while read D M Y ; do
        THIS=$(date -d "$Y-$M-$D 01" '+%s')
        if (( THIS > DATE )) ; then
            COUNT=$((COUNT + 1))
        fi
        done
        echo $COUNT
    }
    

    It expects three arguments and the raw dates in stdin:

    for D in $(seq 19 25) ; do echo $D/08/2007 ; done | ./count.sh 22 08 2007
    3
    

    It will work till 2038. ;-)