This article features some simple examples on how to add or subtract a time from a current date. At first we use a native date sytax to do this trick and later we will see how this can be done manually by converting date to an epoch time. Let's start with a simple backup script based on the date Linux command:


tar cjf linuxconfig_$(date +%H%M-%d%m%Y).tar.bz2 ~/public_html

Every time the script is executed it will create a file with a current date included in the file name. The backup problem is solved. However, we do not usually want to keep all backup files indefinitely or until they consume all available free space. This is where the subtraction arithmetics with Linux date command comes handy. Let's see couple examples how to subtract time from a current date using date string: Subtract 10 years from a current date:

$ date
Mon Mar  7 09:26:13 EST 2011
$ date --date="10 years ago" +%H%M-%d%m%Y

Subtract 3 months from a current date:

$ date
Mon Mar  7 09:29:39 EST 2011
$ date --date="3 months ago" +%H%M-%d%m%Y

Subtract 255 days from a current date:

$ date
Mon Mar  7 09:31:13 EST 2011
$ date --date="255 days ago" +%H%M-%d%m%Y

Subtract 32 weeks from a current date:

date; date --date="32 weeks ago" +%H%M-%d%m%Y
Mon Mar  7 10:05:34 EST 2011

Subtract hours minutes from a current date:

$ date; date --date="5 hours ago" +%H%M-%d%m%Y
Mon Mar  7 09:54:42 EST 2011

and as you have already guessed we follow the same format to subtract minutes from current date:

$ date; date --date="5 minutes ago" +%H%M-%d%m%Y
Mon Mar  7 09:32:48 EST 2011

We can now improve our simple backup script to keep only files which are not older than 6 months:


tar cjf linuxconfig_$(date +%H%M-%d%m%Y).tar.bz2 ~/public_html
rm linuxconfig_$(date --date="6 months ago" +%H%M-%d%m%Y).tar.bz2

Going into the future with date command is as easy as going into the past. All what needs to be done is to add "-" ( minus ) sign in front of every date string. For example you can ask date command to add 12 hours to a current date and time:

date; date --date="-12 hours ago" +%H%M-%d%m%Y
Mon Mar  7 10:02:17 EST 2011

On some Unix systems the date syntax described above may not be available. In this case here as a simple example on how to the do all above using epoch time. epoch time is simply a number of seconds since "Jan 1, 1970 00:00:00". Therefore, epoch time "1" using universal time is:

$ date -ud@1
Thu Jan  1 00:00:01 UTC 1970

Lets see how we can subtract 2 weeks 3 days and 23 seconds from a current date sing epoch time. Please not that we use only universal time for a following calculations. In the first step we need to convert 2 weeks 3 days and 23 seconds into seconds. Use a following table to guide you through this process:

1 year ( 365 ) 31,536,000 seconds
1 week 604 800 seconds
1 day 86 400 seconds
1 hour 3600 seconds
1 minute 60 seconds
1 second 1 second
2 weeks 3 days and 23 seconds = 2 x 604 800 + 3 x 86 400 + 23
2 weeks 3 days and 23 seconds = 1 209 600 + 259 200 + 23
2 weeks 3 days and 23 seconds = 1 468 823 seconds

Now, that we have number of seconds lets subtract this number from a current epoch time:

$ date;echo `date --universal +%s` - 1468823 | bc 
Mon Mar  7 10:43:14 EST 2011

All what has left is to convert output echo time to universal human readable date format:

$ date -ud@1297986171
Thu Feb 17 23:42:51 UTC 2011

To add 2 weeks 3 days and 23 seconds use the same process but use addition instead of subtraction:

$ date;echo `date --universal +%s` + 1468823 | bc
Mon Mar  7 11:02:29 EST 2011

Convert epoch time:

$ date -ud@1300924972
Thu Mar 24 00:02:52 UTC 2011

Go to top