I recently came across a big problem, as I have a system that’s paying the customers weekly.
As we all know, a year has 52 weeks, and there are standards for it. I’m using PHP aka date(‘W’) to get the week number from a date, that calculates that according to the standard ISO-8601.
Here are some references:
But here’s the ISSUE: year 2009 has 53 weeks. It seems that through the Gregorian calendar within 400 years there are 71 years that have 53 weeks. That’s one thing I didn’t know, and probably many didn’t as well.
According to Wikipedia:
2009-12-31 is 2009-W53-4 (ISO year 2009 has 53 weeks, extending the Gregorian year 2009, which starts and ends with Thursday, at both ends with three days).
and the date function in PHP totally respects it.
If you look into MS Outlook, and show day of the week in the calendar view, it will appear 52 weeks
considering 28 DEC 2009 to 03 JAN 2010 week 1. Is this another standard? The US standard or something?
If so, then why PHP can’t support it? Did anyone make a function that supported this?
Is it correct to have 53 weeks? We have both European and US clients.
I don’t think you will have an issue here. Fact is you are following an international standard for date and time formatting and counting (
ISO8601). If you have any customers that complain, simply refer them to the standard.Outlook’s week numbering is somewhat equivalent to the following:
For billing purposes, you are better off using
ISO8601as a standard. In fact, if you look at your taxes that you are going to fill this year, they will describe the last fiscal year as being 53 weeks long.The problem with the Outlook way of counting is that a week is not guaranteed to be 7 days. For example, OW01-2010 is compromised of only 2 days: Fri Jan 1, Sat Jan 2. That’s an awfully short billing period for a week.
ISO8601weeks are guaranteed to be 7 days long which is why we need a leap-week every 4/5/6 years.Which one of those options would you prefer:
ISO8601: Having 53 weeks once in a while, but every single one of them is 7 days long.Outlook: Having 52/53 weeks in a year at random, but having to pay twice a year for an “half-week”.