Arstechnica has a great explanation for why the ‘Do Not Disturb’ bug is occurring, and for why it will correct itself this coming Monday:
Here’s how it works and why it’s throwing DND for a loop. The ISO week numbering system uses the YYYY format for the year instead of the Gregorian calendar’s yyyy. It then looks at which week of the year it is, and then uses a date digit with 1 starting on Monday. So, for example, Tuesday of the 50th week of 2012 would have been 2012-W50-2 in ISO week format.
The problem comes in when January 1 of the new year ends up falling on a date that doesn’t get along well with the ISO week format. The first day of 2013 started on a Tuesday, whereas (as noted by TUAW) the ISO standard expects the first week of the year to start on “the Monday that contains the first Thursday in January.” In this case, that would be January 7, 2013.
While still just a hypothesis, such an explanation makes sense. Dates historically present an interesting issue for programmers. There are many exceptions to how they work, and different formats present different problems.
Apple has a checkered history with dates and alarms, having had issues last year because of a similar reason. It isn’t just Apple: Google left out the entire month of December in the initial 4.2 update late last year because of an n+1 issue in the code. Such issues are incredibly easy to overlook, and are only noticeable when being used by millions of people around the world (Google also has the added advantage of the source code being widely available, with thousands of developers poring over it as they take it and use it for various purposes).