misguided
misguided

Reputation: 3789

getting a previous date in bash/unix

I am looking to get previous date in unix / shell script .

I am using the following code

date -d ’1 day ago’ +’%Y/%m/%d’

But I am getting the following error.

date: illegal option -- d

As far as I've read on the inetrnet , it basically means I am using a older version of GNU. Can anyone please help with this.

Further Info

unix> uname -a

SunOS Server 5.10 Generic_147440-19 sun4v sparc SUNW,Sun-Fire-T200

Also The below command gives an error.

unix> date --version

date: illegal option -- version
usage:  date [-u] mmddHHMM[[cc]yy][.SS]
date [-u] [+format]
date -a [-]sss[.fff]

Upvotes: 9

Views: 76956

Answers (12)

suresh Palemoni
suresh Palemoni

Reputation: 1226

date -d "yesterday" '+%Y-%m-%d'

Upvotes: -1

venki
venki

Reputation: 167

Try This: gdate -d "1 day ago" +"%Y/%m/%d"

Upvotes: -1

Ravi Babu Mathi
Ravi Babu Mathi

Reputation: 19

the following script prints the previous date to the targetDate (specified Date or given date)

targetDate=2014-06-30
count=1
startDate=$( echo `date -d "${targetDate} -${count} days" +"%Y-%m-%d"`)
echo $startDate

Upvotes: 1

Vladislav Ross
Vladislav Ross

Reputation: 581

dtd="2015-06-19"
yesterday=$( date -d "${dtd} -1 days" +'%Y_%m_%d' )
echo $yesterday;

Upvotes: 9

Dan Pickard
Dan Pickard

Reputation: 463

you can use

date -d "30 days ago" +"%d/%m/%Y"

to get the date from 30 days ago, similarly you can replace 30 with x amount of days

Upvotes: 9

akash malbari
akash malbari

Reputation: 1

$ date '+%m/%d/%Y' --- current date


$ TZ=Etc/GMT+24 date  '+%m/%d/%Y'  -- one dayprevious date

Use time zone appropriately

Upvotes: 0

user3568717
user3568717

Reputation: 67

In order to get 1 day back date using date command:

date -v -1d It will give (current date -1) means 1 day before .

date -v +1d This will give (current date +1) means 1 day after.

Similarly below written code can be used in place of d to find out year,month etc

y-Year, m-Month w-Week d-Day H-Hour M-Minute
S-Second

Upvotes: 5

tripleee
tripleee

Reputation: 189457

SunOS ships with legacy BSD userland tools which often lack the expected modern options. See if you can get the XPG add-on (it's something like /usr/xpg4/bin/date) or install the GNU coreutils package if you can.

In the meantime, you might need to write your own simple date handling script. There are many examples on the net e.g. in Perl. E.g. this one:

vnix$ perl -MPOSIX=strftime -le 'print strftime("%Y%m", localtime(time-86400))'
201304

(Slightly adapted, if you compare to the one behind the link.)

Upvotes: 2

devnull
devnull

Reputation: 123528

Several solutions suggested here assume GNU coreutils being present on the system. The following should work on Solaris:

TZ=GMT+24 date +’%Y/%m/%d’

Upvotes: 4

kumarprd
kumarprd

Reputation: 936

try this:

date --date="yesterday" +%Y/%m/%d

Upvotes: 18

misguided
misguided

Reputation: 3789

I have used the following workaround to get to the required solution .

timeA=$(date +%Y%m)
sysD=$(date +%d)
print "Initial sysD $sysD">>LogPrint.log
sysD=$((sysD-1))
print "Final sysD $sysD">>LogPrint.log
finalTime=$timeA$sysD

I hope this is useful for people who are facing the same issue as me.

Upvotes: 0

Todd A. Jacobs
Todd A. Jacobs

Reputation: 84363

Problem

You are using backticks, rather than single quotes, for your arguments. You may also not be using GNU date, or a version of date that supports the flag you are using.

Solution

Quote your arguments properly. For example:

$ date -d '1 day ago' +'%Y/%m/%d'
2013/04/14

Upvotes: -1

Related Questions