> Please tell me this is a bug, not a feature.
>   t = Time.local(2000,11,31)  # Nov 31, 2000 (nonexistent date)
>   # t is now Dec 1, 2000 - no errors, no nothing
> This is v. 1.6.0 on AIX.

This seems normal. Given that the day number is not above 31, there are
several useful things to do with an invalid date:

1. Round down to the last day of the month
2. Spill over to next month (feb 31, 2001, becomes mar 3, 2001)
3. Treat as 1st of the next month
4. Return nil or throw exception

The most useful case seems to be #2 (if you pick one, consider how you'd
implement the three others in terms of the one you pick)

Case #2 is how UNIX did it, and it's how POSIX does, and then others have
followed; most practical languages do it like POSIX, and javascript does
too. =)

If you want to know if you have spilt over, get the month number and
compare with the original one.

invalid dates commonly appear when you try to "add months" to a date.

matju