How to find yesterday's or tomorrow's date using shell?

There are couple of different ways to perform this task using shell date command depending on used OS. I will concentrate on Ubuntu Linux, OpenBSD and FreeBSD.

Ubuntu Linux

Ubuntu Linux offers -d switch to find the answer.

$ date --version
date (GNU coreutils) 8.5
...

Current date:

$ date
Thu Dec 15 21:37:53 CET 2011

Calculate yesterday's date:

$ date -d "yesterday"
Wed Dec 14 21:38:02 CET 2011
$ date -d "last day"
Wed Dec 14 21:38:03 CET 2011
$ date -d "-1 day"
Wed Dec 14 21:38:05 CET 2011

Calculate tomorrow's date:

$ date -d "tomorrow"
Fri Dec 16 21:39:20 CET 2011
$ date -d "next day"
Fri Dec 16 21:39:22 CET 2011
$ date -d "+1 day"
Fri Dec 16 21:39:25 CET 2011

OpenBSD

Using OpenBSD this task needs to be performed in different way as there is no equivalent switch.

Current date:

$ date
Thu Dec 15 22:15:07 CET 2011

Calculate yesterday's date:

$ date -r `expr $(date +%s) - 86400` 
Wed Dec 14 22:15:09 CET 2011

Calculate tomorrow's date:

$ date -r `expr $(date +%s) + 86400` 
Fri Dec 16 22:15:11 CET 2011

FreeBSD

FreeBSD offers handy -v switch to perform this task.

Current date:

$ date
Thu Dec 15 22:18:14 CET 2011

Calculate yesterday's date:

$ date -v-1d
Wed Dec 14 22:18:18 CET 2011

Calculate tomorrow's date:

$ date -v+1d
Fri Dec 16 22:18:22 CET 2011
Milosz Galazka's Picture

About Milosz Galazka

Milosz is a Linux Foundation Certified Engineer working for a successful Polish company as a system administrator and a long time supporter of Free Software Foundation and Debian operating system.

Gdansk, Poland https://sleeplessbeastie.eu