Actually, I use a compromise of the two, superwormy. On the older versions of postgresql, now() - interval '1 month' type things aren't indexable, so I'd do a single query of :
select now() - interval '30 days'
Get that back and build the query with the date string I got out of that:
select * from table where date between '$start' and '$end';
The main advantage to doing all your date work in the database is that it handles all your time zone conversion for ya.