Firstly I should say that I'm in Sydney, so it's February for me now. For the end of February you get { 1, 28 }. For January you get { 1, 31 }.

What the function does is ask this (in the case where you pass NSDayCalendarUnit and NSWeekCalendarUnit):

"What is the smallest range that will cover the possible values of day for the week on the date I specify?"

What the function does *not* do is tell you "what is the first day of that week and how long is it?".

So, take 31 Jan 2008 for example. The week starts on 27 Jan, so the day can take the values, 27, 28, 29, 30, 31, 1, 2. The smallest range that covers those values is clearly {1, 31} which is what you get on Leopard.

I realise that you want the function to work differently, but I'm afraid it doesn't and it's perfectly logical the way it works. There is a bug on Tiger because by returning { 28, 7 } it's suggesting that the day will always fall into that range i.e. 28-34.

I'll bet your Mac Pro that Apple tell you it works as expected. :-)