skip to Main Content

So I am trying to compare 2 dates in bash , but my dates contains characters like Jan or Monday .
Can I compare them directly or do i need to format them like this "20201607"(and how do i do this plz) and them numerically compare them?
Thank you
For example:

today=$(date)
day='21 Jan 2021'

if [ $today < $day ]
   echo "$day"

basically my function will just return the dates who does not happened atm.

2

Answers


  1. Use the date to seconds since the epoch (1970-01-01 UTC) through specifying %s with date and so:

    day='21 Jan 2021'
    if [[ "$(date +%s)" -lt "$(date -d "$day" +%s)" ]];
    then 
        echo "$day";
    fi
    
    Login or Signup to reply.
  2. Zenity can help you: Tell zenity what output date format you want:

    while ! date=$(zenity --calendar --date-format '%Y%m%d'); do
        # ...........................^^^^^^^^^^^^^^^^^^^^^^
        echo "Don't cancel the zenity window, select a day"
    done
    
    # bash v4.2+ can to date formatting
    today=$(printf '%(%Y%m%d)T' -1)
    
    if [ "$date" -gt "$today" ]; then
        echo "you entered a future date"
    fi
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search