This is all SQL-92 spec stuff. Unfortunately, the most popular of Open source databases does not yet support intervals.
In a database that does support intervales, such as postgresql, db2, oracle, informix, sybase, or mssql server, you can do it like this:
select cast ('20020304' as timestamp) - cast('30 days' as interval);
by the way, the SQL spec only technically supports timestamps of the format:
yyyymmdd hh:mm:ss +/-tz
So you should be able to store your dates anyway you want, and they should get converted to some internal format, and you should be able to specify the display format on output with some built-in for most databases.
Not sure if MySQL 4.x supports intervals yet. If not, it would be nice if they'd get around to adding them. They're quite useful.
Note that select cast ('20020304' as timestamp) - cast('30 days' as interval); isn't the same as select cast ('20020304' as timestamp) - cast('1 month' as interval);
since a month may not be exactly 30 days. Doing this by hand is a bitch. Letting a database do it and get it right is much easier.