I want to subtract \"number of days\" from a date in bash. I am trying something like this ..
echo $dataset_date #output is 2013-08-07
echo $date_diff #outp
You are specifying the date incorrectly. Instead, say:
date --date="${dataset_date} -${date_diff} day" +%Y-%m-%d
If you need to store it in a variable, use $(...)
:
p_dataset_date=$(date --date="${dataset_date} -${date_diff} day" +%Y-%m-%d)
Below code gives you date one day lesser
ONE=1
dataset_date=`date`
TODAY=`date -d "$dataset_date - $ONE days" +%d-%b-%G`
echo $TODAY
To me, it makes more sense if I put the options outside (easier to group), in case I will want more of them.
date -d "$dataset_date - $date_diff days" +%Y-%m-%d
Where:
1. -d --------------------------------- options, in this case
followed need to be date
in string format (look up on $ man date)
2. "$dataset_date - $date_diff days" -- date arithmetic, more
have a look at article by [PETER LEUNG][1]
3. +%Y-%m-%d -------------------------- your desired format, year-month-day
Here is my solution:
echo $[$[$(date +%s)-$(date -d "2015-03-03 00:00:00" +%s)]/60/60/24]
It calculates number of days between now and 2015-03-03 00:00:00
If you're not on linux, maybe mac or somewhere else, this wont work. you could check with this:
yesterday=$(date -v-1d +"%Y-%m-%d")
to get more details, you could also see
man date
one liner for mac os x:
yesterday=$(date -d "$date -1 days" +"%Y%m%d")