How to get the date yesterday in AIX sh

Hi,

In AIX sh, how to return the date of yesterday in format of %Y%m%d, YYYYMMDD.

i.e. if today is 20080704, I want it return 20080703.

Can anyone help?

Thanks!
Victor Cheung

I have found it from this forums:
YESTERDAY=`TZ=aaa24 date +%Y%m%d`

Thanks!

date command internally refers to the env variable TZ(time zone)
so just change TZ=IST+24
then execute date command in whichever format you get yesterdays date
then revert back the TZ variable to TZ=IST-5:30
(but this changes are temporary)

This was THE solution I have been looking for so long !!, GREAT
Thanks again, saved my day :slight_smile:

I got sick of trying to script yesterday's date into so many different formats that I finally wrote and stole portions of this script to do it for me. I just pass in any arguments I want and out comes yesterdays date. I named the script "yesterday" and put it in /usr/local/bin on all my boxes:

FORMAT=${1:-YYYYMMDD}

if [ "$FORMAT" = "-help" ] || [ "$FORMAT" = "-h" ]; then
        echo "Usage:    Arguments are optional and can be given in any order"
        echo "          yesterday  [YY|yy|YYYY|yyyy|MM|mm|MMM|mmm|DD|dd]"
        exit 0
fi

typeset -Z2 YESTERDAY
typeset -Z2 MONTH

YESTERDAY=$((`date +%d` -1))
MONTH=`date +%m`
YEAR=`date +%Y`
if [ "$YESTERDAY" -eq "0" ]; then
        MONTH=$((MONTH-1))
        if [ $MONTH -eq "0" ]; then
                MONTH=12
                YEAR=$((YEAR-1))
        fi
        set `cal $MONTH $YEAR`
        shift $(($# - 1))
        YESTERDAY=$1
fi

ABBR_MONTH=$(echo $MONTH | sed \
        -e "s/01/Jan/" \
        -e "s/02/Feb/" \
        -e "s/03/Mar/" \
        -e "s/04/Apr/" \
        -e "s/05/May/" \
        -e "s/06/Jun/" \
        -e "s/07/Jul/" \
        -e "s/08/Aug/" \
        -e "s/09/Sep/" \
        -e "s/10/Oct/" \
        -e "s/11/Nov/" \
        -e "s/12/Dec/")

## Print the result
echo "${FORMAT}" | sed \
        -e "s/[Mm][Mm][Mm]/${ABBR_MONTH}/" \
        -e "s/[Yy][Yy][Yy][Yy]/${YEAR}/" \
        -e "s/[Yy][Yy]/$(echo ${YEAR}|cut -c3-4)/" \
        -e "s/[Mm][Mm]/${MONTH}/" \
        -e "s/[Dd][Dd]/${YESTERDAY}/" 

Here is some examples of it running:

hostname:/:$ date
Tue Mar 31 16:28:15 CDT 2009
hostname:/:$ yesterday yyyymmdd
20090330
hostname:/:$ yesterday yyyy/mm/dd
2009/03/30
hostname:/:$ yesterday MM/DD/YYYY
03/30/2009
hostname:/:$ yesterday MM-DD-YYYY
03-30-2009
hostname:/:$ yesterday "MM dd YYYY"
03 30 2009
hostname:/:$