I'm sorry, but that logic is way to contrived. I've polled several devs and not one even intimated anything close to what you suggested, all expecting the same behavior I was. Plus, answer this, how is the behavior you described even remotely useful?

But, even using your logic, it doesn't hold up. Try this:

date = [NSCalendarDate dateWithYear:2008 month:1 day:34 hour:0 minute:0 secon\
d:0 timeZone:nil];
NSLog(@"Date : %@", date);

34 is an acceptable value for day and NSCalendarDate is smart enough to know that extends into the next month. Plus, the range does not necessarily suggest that the numbers 32-34 are the actual "labels" for the days. The range says the 7 days starting from the 28th.

And additionally, your logic doesn't explain the 31 days in a year. How is that supposed to be desired behavior?

Look, at this point, there is no way you can convince me that you're way makes more sense or is in any way more useful. And if you can't see the obvious logical expectation that everybody else has (ask around by just showing them the method description and see what they say) then there's little point in me trying to convince you.