The problem you have is at the first of the month. (day - 2) does not work when today is the 1st or 2nd. The command "date '2 days ago'" does not work with the standard Unix date command. That syntax is a part of the GNU version of date. I would recommend installing it as it seems to be 100% backwards compatible with the vanilla date command but, as you can see, adds much more functionality. It is a part of the
coreutils package from GNU. Once you have this then SriniShoo's examples should work. I like to install this and call it gdate just to make sure to keep the original date command in tact.
There is also a shell script you can find on this site written by Perderabo which also does some pretty good date handling called
datecalc. I like the GNU date a little better but, just in case you cannot install 3rd party software, datecalc is a pretty close second.