0

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 Answers2

3

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
glenn jackman
  • 238,783
  • 38
  • 220
  • 352
Raman Sailopal
  • 12,320
  • 2
  • 11
  • 18
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
glenn jackman
  • 238,783
  • 38
  • 220
  • 352
  • Thank you , to fix it , i transformed the date in a integer format with year month and day and then compare it numerically. – Justin Mayer Mar 06 '21 at 06:00