#!/bin/sh
# offset_date
#
# calculates the date differing from the current date (default) or a
# given starting date by a given offset number of days
#
# usage:  offset_date yyyymmdd noff  *or*  offset_date noff 

 usage () {
 echo "Usage:"
 echo " offset_date yyyymmdd noff"
 echo " or"
 echo " offset_date noff"
 echo " Returns the date differing by noff days from today (default)"
 echo " or a given starting date, both in the form of yyyymmdd."
	 }

if [ $# != 2 ]
then
usage
exit
fi

# convert default or input yyyymmdd to a julian date
if [ $# = 2 ]
  then
    jul=`ymd2yd $1`
    off=$2
else
    today=`date -u +%Y%m%d`
    jul=`ymd2yd $today`
    off=$1
fi

#echo "Julian start = $jul"

# Break the date in to year and day portions
yyyy=`expr $jul / 1000`
ddd=`expr $jul % 1000`

# Apply offset to julian day
dddoff=`expr $ddd + $off`

#echo "dddoff = $dddoff"

if [ `expr $off \< 0` = 1 ]
  then 
    # negative offset, work backwards
    # decrement year and add days in year to offset result until days > 0
    while [ `expr $dddoff \< 1` = 1 ]
      do
        yyyy=`expr $yyyy - 1`
        diy=`yeardays $yyyy`
        dddoff=`expr $dddoff + $diy`
    done
else 
    # positive offset, work forwards.
    # increment year and subtract days in year from offset result until
    # days < days_in_year
    diy=`yeardays $yyyy`
    while [ `expr $dddoff \> $diy` = 1 ]
      do
        dddoff=`expr $dddoff - $diy`
        yyyy=`expr $yyyy + 1`
        diy=`yeardays $yyyy`
    done

fi

juloff=`expr $yyyy \* 1000 + $dddoff`
#echo "Juloff = $juloff"

newdate=`yd2ymd $juloff`

# output the results
echo $newdate
