views:

172

answers:

4

I have two variables: X and Y.

The value of X will be a date given in the format mmddyy and I want to calculate the date preceeding that date and have it be returned in in the format yyyymmdd.

Let me give you an example. When X="091509" (mmddyy format) Y should be "20090914" (yyyymmdd format)

A: 

date -d "yesterday"

foobar
i dont want yesterdays date..............
musicking123
+4  A: 
~$ date -d "20090101 -1 day"
Wed Dec 31 00:00:00 CET 2008

And if you want to retrieve the date in a custom format you just throw in some format strings.

~$ date -d "2009-09-15 -1 day" +%Y%m%d
20090914

As for your conversion you may use bash substring extraction (assuming you use bash of course). This also assumes that your input is consistent and "safe".

X="091509"
Y=`date -d "${X:4:2}${X:0:2}${X:2:2} -1 day" +%Y%m%d`
echo $Y

See http://www.walkernews.net/2007/06/03/date-arithmetic-in-linux-shell-scripts/

Markus Olsson
+%Y%m%d
mobrule
This doesn't address the problem of converting your $X to work in this, but yes, let the date command work out which is the day before 030100 (for example).
pavium
@pavium.... right you are. I've added one way of doing such a conversion now. Thanks for pointing it out!
Markus Olsson
This will work on GNU date (e.g. on Linux), but unfortunately `-d` is not portable.
mark4o
A: 

I like Tcl for date arithmetic, even though it's clunky for shell one-liners. Using Tcl 8.5:

x=091509
y=$(printf 'puts [clock format [clock add [clock scan "%s" -format "%%m%%d%%y"] -1 day] -format "%%Y%%m%%d"]' "$x" | tclsh)
glenn jackman