Operating System - HP-UX
1833451 Members
3017 Online
110052 Solutions
New Discussion

date (how to get date of yesterday)

 
SOLVED
Go to solution
Manuales
Super Advisor

date (how to get date of yesterday)

Hi ..
if i run date i get:

$ a=`date "+%b %d"`
$ echo $a
Apr 30


how can i get one day before?
i mean, i need to get the value of yesterdad (according to current date) to keep it in a variable ...

in this case, today is "Apr 30"
I need get "Apr 30"

if today were "May 1" , i woould need to get "Apr 30" ..

how can i do that

plase let me know :)

Thanks in Advance.
6 REPLIES 6
Yogeswar
Frequent Advisor
Solution

Re: date (how to get date of yesterday)

#!/bin/ksh
# /usr/local/bin/when
# usage "when 7" to go back 7 days, "when 14" to go back 14, etc.
# useless to go back more than a month
set -A MONTHS Dec Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
BACK=$1
THEN=$((`date +%d` - $BACK))
MONTH=`date +%m`
YEAR=`date +%Y`
if [ $THEN -le "0" ]
then
MONTH=$((MONTH-1))
if [ $MONTH -eq "0" ]
then
MONTH=12
YEAR=$((YEAR-1))
fi
set `cal $MONTH $YEAR`
SHIFT=$(( $THEN * -1 + 1 ))
shift $(($# - $SHIFT))
THEN=$1
fi
TMONTH=${MONTHS[MONTH]}
# uncomment next line for debugging
echo $THEN $MONTH $TMONTH $YEAR

Manuales
Super Advisor

Re: date (how to get date of yesterday)

IT does not work :(



$ cat > fecha
#!/bin/ksh
# /usr/local/bin/when
# usage "when 7" to go back 7 days, "when 14" to go back 14, etc.
# useless to go back more than a month
set -A MONTHS Dec Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
BACK=$1
THEN=$((`date +%d` - $BACK))
MONTH=`date +%m`
YEAR=`date +%Y`
if [ $THEN -le "0" ]
then
MONTH=$((MONTH-1))
if [ $MONTH -eq "0" ]
then
MONTH=12
YEAR=$((YEAR-1))
fi
set `cal $MONTH $YEAR`
SHIFT=$(( $THEN * -1 + 1 ))
shift $(($# - $SHIFT))
THEN=$1
fi
TMONTH=${MONTHS[MONTH]}
# uncomment next line for debugging
echo $THEN $MONTH $TMONTH $YEAR

$ ./fecha
sh: ./fecha: Execute permission denied.
$ chmod 755 fe*
$ ./fecha
./fecha[7]: 30 - : more tokens expected
$
Manuales
Super Advisor

Re: date (how to get date of yesterday)

i did several tests and i does not work:

$ ./fecha
sh: ./fecha: Execute permission denied.
$ chmod 755 fe*
$ ./fecha
./fecha[7]: 30 - : more tokens expected
$ fecha `date`
./fecha[7]: 30 - Wed: bad number
$ fecha `date "+%b %d"`
./fecha[7]: 30 - Apr: bad number
$ fecha `date`
./fecha[7]: 30 - Wed: bad number
$
James R. Ferguson
Acclaimed Contributor

Re: date (how to get date of yesterday)

Hi Manuales:

use Perl;

# perl -le 'print scalar localtime time - 86400'

# perl -MPOSIX -le 'print strftime "%m/%d/%Y",localtime(time-86400)'

If you use the second snippet, you can use the same formatting directives you use with the Unix 'date' command; e.g.:

# perl -MPOSIX -le 'print strftime "%b %d",localtime(time-86400)'
Apr 29

Regards!

...JRF...
Manuales
Super Advisor

Re: date (how to get date of yesterday)

thanks a lot Krishna and James !!

$ perl -MPOSIX -le 'print strftime "%b %d",localtime(time-86400)'
Apr 29
$ perl -MPOSIX -le 'print strftime "%m/%d/%Y",localtime(time-86400)'
04/29/2008
$ perl -le 'print scalar localtime time - 86400'
Tue Apr 29 18:42:31 2008
Yogeswar
Frequent Advisor

Re: date (how to get date of yesterday)

Try this One!

#! /usr/bin/ksh
# Get yesterday's date in YYYY-MM-DD format.
# With argument N in range 1..28 gets date N days before.




OFFSET=${1:-1}



case $OFFSET in
*[!0-9]* | ???* | 3? | 29) print -u2 "Invalid input" ; exit 1;;
esac



eval `date "+day=%d; month=%m; year=%Y`
typeset -Z2 day month
typeset -Z4 year



# Subtract offset from day, if it goes below one use 'cal'
# to determine the number of days in the previous month.
day=$((day - OFFSET))
if (( day <= 0 )) ;then
month=$((month - 1))
if (( month == 0 )) ;then
year=$((year - 1))
month=12
fi
set -A days `cal $month $year`
xday=${days[$(( ${#days[*]}-1 ))]}
day=$((xday + day))
fi



print $year-$month-$day
print $month/$day/${year#??}