back to article 7000 Leap Year Babies attack Steve Ballmer

Seven thousand leap year day babies have revolted against the Toys R Us giraffe, skewering Steve Ballmer along the way. Peeved that Geoffrey the Giraffe never sends birthday cards to kiddies born on February 29, the international Honor Society of Leap Year Day Babies recently unsheathed free software capable of destroying the …


This topic is closed for new posts.
  1. stizzleswick

    It's not a bug...'s a feature!

  2. Tom

    Let's see now..

    "How do you explain to a five-year-old, that they won't receive a birthday card from Geoffrey over at Toys R Us this year, because the Toys R Us computer has no way to recognize their birthday?" asks Society spokeswoman Raenell Dawn.

    Well, surely anyone who was born on Feb 29th will not have a birthday until they are four, and then again when they are eight. So why would they expect a card when they are five?

    Or alternatively, anyone born on Feb 29th who had had 5 birthdays, would be 20 years old. Now why would a 20 year old expect a card from Geoffrey the giraffe?

  3. Rob Beard
    Gates Horns

    I've always wondered...

    If you're born on 29th Feb, does that mean you only age 1 year every 4 years?

    What do the do about celebrating their birthday every other 3 years?

    I can't believe that these site's can't fix the leap year bugs. I mean I'm really not very good at writing shell scripts on Linux but I still managed to bodge up some code to detect leap years.


  4. Mike Hams

    5 Year Old

    Worrying that a leap year 5-year old would want a giraffe from Toy R Us.

  5. Mike Watts


    "How do you explain to a five-year-old, that they won't receive a birthday card..."

    I think it's probably best if this guy doesn't try, I'm not convinced he understands the concepts involved...

  6. michael


    'But that bug has been in our software for 20 years, it has to be in the standard.'

    explanes a lot about microsoft

  7. Andy
    Thumb Down

    No Excuse.

    I hate to write an "is-it-a-leap-year" routine recently, and after 10 minutes research on the internets, I found I could do it it about a dozen lines of code. It's not trivial, but neither is it atomic physics. There's no excuse.

  8. Adam White

    OOXML standard

    I'd like to see a transcript from THAT meeting!

  9. Shakje


    I think Ballmer is as mad as everyone else, however, the Lotus bug is pretty well documented and to say "well he says so, so it must be true". Waste of space, the original article was interesting enough, but he's obviously thrown in that MS complaint to get publicity, and you've fallen straight into it.

  10. Neil Hoskins

    Happy Birthday

    Today is my mum's 21st birthday. I don't suppose she gets a card from Geoffrey?

  11. Stuart Morrison
    Gates Horns

    There is a difference..

    ..between how many 'years old' you are and how many birthdays you have had.

    A person born on Feb 29th may have had five 'genuine' birthdays but as they have been alive for 20 years they are 20 years old, not 5 years old.

    And no Bill, it's not a feature or a standard; it's a bug. Bastard.

    Sorry but I'm grumpy this morning.

  12. Dan B

    @ Neil

    Your mums "21'st" birthday?

    Maybe you should be getting the card from Geoffrey :-)

  13. Ely Whippetbanger

    Hang on... they actually want to tell the truth online?

    Surely no-one with more than three brain cells actually answers online questions with the truth? More likely they're actually some kind of front organisation devoted to increasing the birthday-lie-space for us all. Brave heroes of the net - I salute you!

    Alien because they're out to get us....

  14. Stuart

    Ah but........

    ' And Microsoft said 'But that bug has been in our software for 20 years, it has to be in the standard.'" '

    As this is a leap year related bug, it's only been in there 5 years!

    That one there with the pocket protectors and the leather patches on the elbows.

  15. James Condron

    I'm sorry Timmy....

    ...Geoffrey wont be sending you a birthday card like the other boys"

    "But why mummy? Why does Geoffrey hate me?"

    Ah, picking on the kids in school who never got a card from Geoffrey, either because their parents didn't sign them up or they were born on 29th Feb., although of course those kids are now murderers.

    Funny how childhood trauma does that.

  16. Spleen

    Babies indeed

    Just put your damn birthday as Feb 28th or March 1st. If you're that stubborn that you absolutely must put the date as Feb 29th, I assume that you refuse all presents, birthday drinks etc. offered in any year that isn't a leap year, because "the 29th February is my birthday and it doesn't happen this year, whhhuhhhh."

    I mean, ringing up YouTube to complain you can't put your birthday as February 29th, for god's sake? I might be wary about shifting my birthdate if I was opening a bank account or getting a driver's licence or something else financial/legal, but with YouTube it's just a sodding age check, the month and day fields are totally irrelevant. With those forms I leave the month and day as January 1st anyway because a) privacy and b) four fewer mouse clicks.

    I'm sure leap year births get enough tiresome jokes along the lines of "so you're actually only (age / 4), no booze for you then" throughout their lifetime that they really don't need people like this making it easier.

    (It may be easy to talk - although if I'd been born a leap year, I would myself have been born on the 29th - but I'm fairly sure that if I had been born on the 29th, I wouldn't join a special society. As there are likely to be *quick fag-packet calculation* over 40,000 people in the UK born on 29th of February this lot can't exactly call themselves representative.)

  17. Spleen

    Apologies for double post

    I missed that this is the *international* society of leap year babies. So my fag-packet calculation should have pointed out that these 7,000 people are actually representing 4,500,000 people.

  18. anarchic-teapot

    If only it were the only date-related bug

    I've had mine rejected a couple of times, and I was born on 29th Feb, or even in a leap year.

    And yes, I did take into account that some countries (all one of it) get the day and month the wrong way around.

    I can only assume that the webdesigner for those sites was convinced no-one over forty would want to sign up for the service. Well, in a way (s)he was right.

    (as for "actually answers online questions with the truth?" - well it helps when sorting out which services I actually signed up for, and who's been selling my data, despite it being illegal in Europe.)

  19. Neil Hoskins


    You're on the Excel development team, presumably... I said it was her 21st birthday, not that she was 21 years old.

  20. Sohail Hussain

    Excel, 1900 and leap years

    > The world's most popular spreadsheet still fails to realize that 1900 is not a leap year. "That bug has been around for 20 years," Brouwer says. "Microsoft has always claimed that it's there to provide backwards compatibility with Lotus 1-2-3. But I've spoken to Mitch Kapor, who built Lotus 1-2-3, and he said 'Oh no, we never had a bug like that.'"

    So it's Mitch Kapor word


    1. Microsoft (

    2. A "well documented bug" (Shakje quote)

    3. Joel Spolsky (

  21. Jeff Fox

    I always lie

    My birthday is in sept but I usually lie on those forms anyway. Seriously, what benefit does telling them your actual birthday give to you? Different case when money is involved otherwise it's lies, lies, lies!

  22. Sceptical Bastard

    What's the Microsoft angle here?

    Enough already! Stop right there!

    Firstly, WTF has this story to do with the mad spastic-dancing foul-mouthed sweat-monster who loves his company? Putting his name in the headline merely draws specious attention to a non-story about whingeing twenty-ninthers, people who really need to get a grip! Who cares about their bloody birthday?

    Secondly, like Spleen above I also: "...leave the month and day as January 1st anyway because a) privacy and b) four fewer mouse clicks."

    Why would I want YouTube, eBay, Google and every packet-sniffer in between to know my true date of birth (DoB)? Allied with other personally-identifying info, DoB is a useful tool in any scamsters' armoury.

  23. david wilson


    As spleen suggests, just stick another birthdate in.

    In the particular case of birthday cards, I don't tend to write "Happy birthday on dd:mm!", just "Happy birthday!". Similarly, I tend to post cards a few days early, relying on the recipient to be smart enough to know when to open it.

    If the bulk-mailed birthday cards *do* have a date printed on, maybe people would be better just asking the retailer to not put a date on - that doesn't involve any futile complaining about Microsoft.

    In any case, it's worth Feb 29th children learning they're a chronological anomaly, just as it's worth every kid learning at an early age that being in a database doesn't mean a company really knows them or care about them - it's just marketing.

  24. Anonymous John

    The U.S. Defense Department is even more confused

    '"We're now into the window," a senior defense official told a news conference minutes after the shuttle landed.

    He said it will remain open until Feb. 29 or 30.'

  25. Stephen Gazard


    in php it takes into account leap years:

    if(!checkdate($month,$day,$year)){return false;}

    one line. that's all. Not a javascript solution, but certainly one that works

  26. Anne van der Bom

    Brouwer's got a calendar bug?

    "How do you explain to a five-year-old, that they won't receive a birthday card..."

    Someone born on the 29th of february will have his first birthday when he turns 4, not 5.

  27. Geoff Mackenzie


    Normally I rarely side with Pope Gregory, but in terms of date standards I think he pips Microsoft at the post. Papal infallibility might be dubious but it's a better justification for using a particular calendar than Microsoft's incompetence...

  28. JP Strauss

    surely this is easy





    // or even

    $febDays = ($year\4==0) ? 29 : 28;

    It is inexcusable that any developer would not think of this.

  29. Gordon Matson

    I think you've all missed the point

    i've just signed about 40 of my mates up to the toys r us website for cards in the next week or two.

  30. The Mighty Spang


    Yep thats definately it, everbody should start using that code.

    of course that's sarcasm. you should reread the article and look for the clues that suggests it might be a bit more difficult than that (clue: 1900)

    then perhaps wikipedia?

  31. Phill
    Thumb Down

    Is that the issue?

    is it not about the validation of the date? or is it about the fact that calendar goes 28th Feb -> 1st March without processing all the records between those dates? Hence those people who registered their b day on the 29th feb never get their record in a batch job?

    I'm confused what you said the problem is. If they can't get on the list then surely they already know they aren't getting a card.

  32. James Pickett


    ..the story (if such there be) is that MS/Excel doesn't behave properly towards leap years. Ballmer stating that the problem has existed for so long that it's now 'standard' tells you all you need to know about him and his company. I give it ten years...

  33. Anonymous Coward

    @JP Strauss

    It's precisely the "surely this is easy" attitude that created the bug in the first place. Leap year is not just based on a 4 year cycle, there are modifiers for 100 and 400 divisors too... RTFM

  34. Andrew Moore
    Thumb Up

    is it a Leap Year code...

    if(year%4==0 && (year%100!=0 || year%400==0))

    return true;

  35. tim

    If you want a card on your birthday...

    ...there's no point in putting a fake date.

  36. Count Ludwig

    @ JP Strauss - surely this is easy

    // Century correction: if year divisible by 100 but not 400 then common year.

    // (Needed for calculating age of my great grandmother in days, or for messing about with daily interest rates of hundred-year Government bonds)

    // Herschel's correction - if year is divisible by 4000 then common year - not required due to general insertion of leap seconds.

    if(remainder($year/4)==0 && ! (remainder (year/100) == 0 && remainder (year/400) != 0 ))




    // or even

    $febDays = ($year/4==0 ? ($year/100==0 ? (year/400==0 ? 29 : 28) : 29) : 28);

  37. Stuart Jones
    Gates Halo


    Excel implements the leap-year bug by default but you can switch to the 1904 date system by going to Tools -> Options -> Calculation -> select 1904 Date System.

  38. Bernard Mergendeiler

    Re 1900 bug -- standard

    There's an old joke about this:

    How many Microsoft developers does it take to change a light bulb? None. Darkness is the new standard.

  39. Cameron Colley

    @david wilson

    <quote>In any case, it's worth Feb 29th children learning they're a chronological anomaly, just as it's worth every kid learning at an early age that being in a database doesn't mean a company really knows them or care about them - it's just marketing.</quote>

    I couldn't agree more, it is also a useful "interesting" way to get them into mathematics and/or computer science -- which has to be a good thing.

  40. The Other Steve


    As a pro codemonkey, this kind of thing makes me totally ashamed of my profession. Any date handling code should include leap years and the 29th of Feb in it's testing. It's the canonical edge case, FFS,

    And Andy and JP, it's because of jerkoffs like you that this kind of thing still apparently happens regularly. Andy, because if it takes you a dozen lines of code, you shouldn't be anywhere near a computer programming role, and JP because yes, it is quite simple, and yet you have manifestly failed to grasp the essentials (as the bishop said to the actress) despite the clues w/r/t to 1900 in the article, and then ejaculated a piece of code that exhibits EXACTLY the problem under discussion, all the while staring smugly at your output and thinking "Well, that's another problem sorted, fookin genius me". Fail

    I'm sorry, but you are incompetent, and you give the rest of us a bad name. Either quit now, or have the decency to admit that you are neophytes at best and go and learn your trade properly.

    Sorry if this sounds a little harsh, but I've spent far to much of my career wiping drool out of people's codebases.

  41. Anonymous Coward
    Anonymous Coward

    Kudos... Ford for getting it right as my car proudly stated the date as 29/02/2008 this morning :)

  42. The Mighty Spang

    @ count ludwig

    you're "or even" code is worse than JP's code - at least thats right a few times

    your code will always return 28. even if it would run (missing '$')

    average reg reader braincells seems to be on a downer here.

  43. James Haigh

    @ Stuart Jones

    Erm, the 1904 date system only works for dates starting at 1904.

    So actually less useful than the flawed 1900 date system, which at least only requires a modifier to the result of an equation


    (If you were using the 1904 date system, the above formula would return #VALUE! error.

  44. Robert Harrison

    Forget the leap year

    I think we should just have 365.25 days per year instead. No more leap year bugs, it can't be that hard can it...... OH GOD NO!!!11111one

    Although that 0.25 is my kind of working day :o)

  45. Anonymous Coward

    Sign my petition... deploy giant robots that will speed up the earth's orbiting of the sun until it completes its trip in 360 days even. Then all our months will be exactly 30 days, and we will no longer have to suffer this, possibly the oldest of all still-living stupid programming errors (our birthdates and all other historical dates will be reset to the start date of the new calendar, in order to avoid any backward compatibility issues).

  46. Nick Hill


    Up to thier usual tricks, all the systems have the correct date 29/02/08 however the i2004 sets have a "feature!" where they refuse to see the date so it's currently 1st March

    My nortel support says it will "sort itself out" tomorrow.

    Meantime everytone thinks im a moron.


    coat cos im not paid for today so im off down thepub.

  47. Darren B


    "How do you explain to a five-year-old, that they won't receive a birthday card from Geoffrey over at Toys R Us this year, because the Toys R Us computer has no way to recognize their birthday?" asks Society spokeswoman Raenell Dawn

    Picky point!: Any five year old who is having their 5th birthday on 29th Feb 2008 is a liar.

    Now as they didn't get a 3rd birthday card then not getting a 4th birthday card is not going to cause too much distress. What you don't know won't hurt you. Does a 3/4 year old really worry about the fact that a stupid cartoon Giraffe is not going to send out a card and it will now ruin his/her birthday - I think not.

    This is just a ego trip by the adults to pick on a high profile "Won't someone think of the children" issue for the sympathy vote when they should be campaigning against the ability to apply this to the real world such as putting birth dates into sites that serve a real purpose such as Shopping or Holiday booking.

    Sorry but you have lost my sympathy on this one by not getting to the real point of the issue.

  48. NoCo37

    @Gordon Matson

    Well played.

  49. Anonymous Coward
    Anonymous Coward

    Ladies and Gentlement, time please.

    Quite simple we just change the seconds unit.

    I know a lot of you will want to change to the minute or the hour, but imagine the confusion that will cause!

    We are currently 5 hrs, 48 mins, and 46 seconds a drift.

    Thats a whopping 20, 926 seconds out.

    365 * (24 * 60 * 60) = 31, 536, 000 seconds is what we want as a year.

    So, a second is now 1.0006635591070523 of the old seconds or as we now refer to them as, 'dark seconds'.

    Now some may be wondering about those born today, well quite simply we all have to recalculate our birthdays, the baseline is the date of the founding of the Old Swiss Confederacy (they make cuckoo clocks so seems apt) 1291, for ease of use we will make it the first moment of that year.

    This message bought to you by - Watchmakers of the World - "Watchmakers do it with precision."

  50. Anonymous Coward

    Universe 2.0

    You see this is why the world should be designed by software developers.

    Dates wouldn't be so complicated (there'd be an easy way to work out Easter, for example); everybody would be assigned a GUID as a name when born; you'd be able to write a parser for every spoken language in 64K of compiled code.

    I personally can't wait until the machines take over and get rid of all this nonsense.

  51. Count Ludwig
    Paris Hilton

    @Mighty Spang

    "your code will always return 28. even if it would run (missing '$')"

    You're right, I meant % (mod operator) not / (div). (What language is this anyway?)

    "average reg reader braincells seems to be on a downer here."

    Ouch! Paris because... maybe I deserved that.

  52. Anonymous Coward
    Anonymous Coward

    Mod 4 is ...

    Probably quite adequate for date handling on most of these systems. True 1900 was not a leap year but any one trying to enter 29 Feb 1900 as a DOB is probably lying anyway. (NOTE THE PROBABLY). There may we be some 108 year old trying to register at Toys R Us or YouTube.

    Still it's quite fun imagining some company big wig being treed by a posse of toddlers.

  53. Anonymous Coward


    Was wondering if people born on February 29th piss off astrologers...

  54. Dave Bell

    Now, what do we do about February 1751

    Or, if it comes to that, 1900 in St. Petersburg.

    From the Calender (New Style) Act 1750

    In and throughout all his Majesty’s dominions and countries in Europe, Asia, Africa, and America, belonging or subject to the crown of Great Britain, the said supputation, according to which the year of our Lord beginneth on the twenty-fifth day of March, shall not be made use of from and after the last day of December one thousand seven hundred and fifty-one; and that the first day of January next following the said last day of December shall be reckoned, taken, deemed, and accounted to be the first of the year of our Lord one thousand seven hundred and fifty-two;

    (The green coat with the gold buttons, please, the one which matchs my waistcoat and breeches.)

  55. Herby

    Hours, minutes, seconds, and days, Oh My!

    I worked with two people who were born on leap day (different years!), and they tell me that their birthday is "the day after February 28th". This seems very logical to me.

    Of course, time should be reckoned by proper Register Units: Microfortnights!

    Now look at your watch, and see if the "day of month" thing is proper. I was told of a digital watch that (because it didn't keep the year, so it is excusable), made March 1 after Feb 28. Then I was told that it was pretty smart, in that if you turned it back on March 1, it went to Feb 29. Now that was cool.

    I suspect that Lotus 1-2-3 just used year%4 to determine leap year. Microsoft didn't understand, so it copied the bug. Now it wants the bug^H^H^Hfeature documented (and standardized!). Why does this sound like them.

  56. Anonymous Coward
    Anonymous Coward


    Apologies to the author, I just realised that I mis-read the article, and thought that 1900 was a leap year and that Excell was right, then banged on about it sanctimoniously. Sorry, I am a tit.

  57. Anonymous Coward

    @Stuart Morrison

    >A person born on Feb 29th may have had five 'genuine' birthdays but as they have >been alive for 20 years they are 20 years old, not 5 years old.

    Technically a person born on Feb 29th has had ONE 'genuine' birthday. How/When they choose to celebrate that occurrence is up to them.

  58. RW

    That Lotus Bug

    Lotus has had the 1900-is-a-leap-year "bug" as long as I've been using it, since release 3.1 for DOS, and the most recent version I've used is the same.

    AFAIK, Excel has always recorded dates the same way simply for compatibility purposes, but these days the compatibility would be with older versions of Excel, not with Lotus.

    What I don't know, and perhaps some El Reg reader with cyber-antiquarian interests can enlighten us on, is whether this "bug" originated with Lotus. Or was it a deliberate effort to make Lotus compatible with Visicalc or some other pre-Lotus spreadsheet?

    The use of 1 Jan 1900 as the reference era for spreadsheet dates, presumably due to hardware issues relating to internal representation of numbers, is an interesting example of failure to foresee possible future uses for software. If the Julian date had been used instead, it would be dead easy to record any historical date in a spreadsheet because the Julian date refers to an era about 4700 BCE, which afaik predates recorded history.

    As matters stand (or stood, for a long time -- does any spreadsheet implement Julian dates?) if you want to record arbitrary historical dates in a spreadsheet, you have to roll your own.

  59. system

    Code confusion

    It is easy.

    In PHP: $leap=(is_int($year/4) && (!is_int($year/100) || is_int($year/400)))?true:false;

    The code above in "surely this is easy" does not work.

    "if(remainder($year/4)==0)" only takes account of the divide by 4 part, not the divide by 100 or 400 part.

    "$febDays = ($year\4==0) ? 29 : 28;" is missing an essential component and will only have feb 29th in the year 4AD :-P

  60. This post has been deleted by its author

  61. Bad Beaver

    sweet fancy Moses...

    If the card from the darn giraffe over at the early-mindless-consumerism-instructor is the worst problem you have in your 5-year-old's life: CONGRATULATIONS

    If it's so gosh-darned important, register your sprog for both 28/2 and 1/3 so he'll get two cards from the plastic giraffe and you can tell him how extra special his birthday is because even the mighty R Us computer can't handle it so he gets two cards as compensation, because that's how special the little prince is. *running, screaming*

  62. Stuart
    Paris Hilton

    Leap back in time!!

    This might explain why the site does appears to actually be about 4 years out, prompted by the article I went for a wander on there and found the sign up for the 'Gamers Club' - once you fill in the normal guff, you get to select what system(s) you have from : PlayStation 2; PSone; Xbox; Nintendo GameCube; PC; Nintendo Game Boy Color; Nintendo Game Boy Advance/SP; Nokia N-Gage, not exactly embracing the latest gaming technology. It's this attention to detail that makes me think the leap 'error' is going to take a while to be fixed.

    Paris? She'd know what to do if her date had a digit that didn't seem to fit.

  63. Antony Riley

    Feb 29th ? Does not Exist.

    At least that's the opinion of two prominent ftp client libraries in the java world.

    The guilty culprits are:

    Apache FTPClient

    Apache Ant's inbuilt ftp client.

    To be fair the former fixed it 3 days ago, and the later fixed it sometime last year (but forgot to release a new version containing the fix).

    (Both failed to recognise files dated February 29th).

  64. paul
    Gates Horns


    Im not saying your wrong. I have no idea about the bug.

    BUT your 3 references are all pro MS. Have you a quote from an independent or IBM?

    So it's Mitch Kapor word


    1. Microsoft (

    The horses mouth

    2. A "well documented bug" (Shakje quote)

    MS developer

    3. Joel Spolsky (

    Head of Excel team.

  65. prathlev
    Thumb Up

    This is funny

    Some of these comments are really funny. :-)

    Especially The Other Steve's rant with which I totally agree even though I'm not a developer.


  66. Steve Roper

    A simple solution

    my @mdays = (31,28,31,30,31,30,31,31,30,31,30,31);

    if ((($year % 4 == 0) && ($year % 100 != 0)) || ($year % 400 == 0)){$mdays[1] = 29;}

    Then use the @mdays array (days in each month) to print out days in your y/m/d selector, perform calculations, or whatever. The conditional equation contained in the IF statement above will compute leap years accurately, including the non-leap year at the end of every century and the end-of-century-IS-a-leap-year every 400 years. Therefore this equation remedies both the 1900 bug AND the lesser-known 1600/2000/2400 bug (these are leap years despite being century years).

  67. J

    Feb 29?

    I don't know the exact law, but in Brazil the parents decide whether they want the official birthday to be Feb. 28 or March 1, I think almost nobody registers their child as born on Feb. 29, to avoid confusion or embarrassment. At least I've never met anybody with that birthday...

  68. Dave Jones
    Jobs Horns

    Just to really confuse matters

    Feb 29 is day 60 of a leap year. In any other year Mar 1 is day 60. Therefore "leapers" simply have their birthday on day 60. March 1 babies are welcome to

    join in.


    Everybody with a birthday after day 60 must celebrate their birthday one day earlier (in the calendric sense) in a leap year.

    Which means that the poor bastards born on day 366 (Dec. 31) in a leap year really really don't get birthdays but once every four years (longer, if a century year intervenes)!!

    Clear now?

This topic is closed for new posts.

Other stories you might like