Here is an other set of strange bugs I've discovered relateing to dates..
SELECT date_part('day', ('2000-11-1 0:00'::datetime + '-1day'))::int4 AS
days_in_month;
days
----
31
(1 row)
SELECT date_part('day', (('2000-10-1 0:00'::datetime + '1 month') + '-1
day'))::int4 AS days_in_month;
SELECT date_part('day', date_trunc('month', ('2000-10-1 0:00'::datetime +
'1 month')) + '-1 day')::int4 AS days_in_month;