[Actually the “new” version is nearly a month old at this point but I forgot to do an entry to announce it.]
There’s a new version of my JavaScript date extensions, DP_DateExtensions, available. This release fixes a significant, but interesting bug brought to my attention by Kevin Warnke. He noticed that, sometimes, when you parsed a date with a 12-hour clock the resulting time was simply wrong – often off by weeks. This, for some reason, annoyed him.
After digging I did find (and fix) the problem. As you might expect to parse a time with a 12-hour time you need to take the time given and add 12 to it (if “PM”) to convert it to a 24-hour clock. To do this I did some simple addition:
Hours = Hours + 12;
This worked fine in most cases. However if “Hours” had leading zero, like “04” JavaScript treats this as a string and would result in “0412” rather than “16” as you might expect. However when adding the value to a date JavaScript happily treats it as a number – so instead of adding 16 hours to my new date this resulted in adding 412 hours – or over 17 extra days!
Although there are many ways to fix this I decided to force the conversion by using the parseInt() function like so (the “10” indicates that you want to parse the value as base 10):
Hours = parseInt(Hours, 10) + 12;
This fixed the problem nicely. In the end, a pretty silly error that I should have caught much sooner.