School is a twelve-year jail sentence where bad habits are the only curriculum truly learned.
John Taylor Gatto
New forum topics
Recent comments
- I haven't explored Puppet
4 weeks 15 hours ago - Wouldn't puppet be more
4 weeks 1 day ago - I agree with the previous
10 weeks 1 day ago - how did this go when you
11 weeks 2 days ago - First off let me say thank
13 weeks 23 hours ago - You are my hero. :) Worked
17 weeks 1 day ago - If you are use this in Django
19 weeks 19 hours ago - You might have gotten this
20 weeks 1 day ago - THANKSSSSSSSSSSSSSS
20 weeks 2 days ago - The valid html suggestion
20 weeks 3 days ago
Writing a simple Javascript function to create a Date object from a 'yyyy-mm-dd' string I found a small, but important, issue with the parseInt function, used to transform strings to integers.
Both parseInt('08') and parseInt('09') return zero because the function tries to determine the correct base for the numerical system used. In Javascript numbers starting with zero are considered octal and there's no 08 or 09 in octal, hence the problem.
To fix this just add the second parameter for parseInt, the base to be used for the conversion. The correct calls should be parseInt('08', 10) and parseInt('09', 10).
Another of those little details, uh?
Related content
Also visit
Other Resources
- Cloud based Task Management Software
- Top rated project scheduling software
- Daniel E Straus Aveta

Join the conversation
nice addition
thanks for the tip! im always using the php version for creating data object, but this is certainly handy too.
Regards,
Aislin
Good Tip.
Good Tip.
This is very good thing to
This is very good thing to catch these type of special cases. Thank you very much.
My problem has been resolved.
My problem has been resolved. Thank you very much.
why we no need of parseint
why we no need of parseint when we use "%" operator?
it executes without using parseint.
Anybody please reply.
Holy smokes, I was going
Holy smokes, I was going crazy with a deep mysterious error until I tracked it down to parseInt('08') and parseInt('09') returning zero. Thanks for the explanation and fix!
Because, the % gives you the
Because, the % gives you the remainder, not the integer. Also you can use the % operator on strings, but you can use parseInt to get a integer from a string.
That was helpful !! what a
That was helpful !! what a catch !!
parseInt('08') => "zero" !! now I understand.
This nearly drove me insane!
This nearly drove me insane! The solution I found though is that when comparing, you don't need parseInt or a % at all...
if ('08' = 8) seems to work fine!
(in IE, FF, and Chrome)
That seems very strange to me; using parseInt('08',10) seems more proper, but I am reluctant to change it again now that it is working.
I can't believe parseInt is so bad... just because 09 doesn't exists in octal does not make returning 0 any better then returning 9. How hard is it to make the function use base 10 even with a leading 0 whenever there is an 8 or a 9 anywhere within the string? This is ultimate failure on the part of who ever invented that javascript base-function and who ever maintains the javascript standard that modern browsers conform to!
Excellent!!! Thanks very
Excellent!!! Thanks very much.
This had been driving me
This had been driving me crazy for the better part of the day until I tracked it down through process of elimination. Given my code I decided to use parseFloat() instead, but I like your way too.
parseInt('08') is not 0
parseInt('08') is not 0 because 8 in octal is 0, but because its not a valid octal number. Therefore parseInt('09') is also 0, for the same reason, although it equals 1 in octal ;)
I had gone through the first
I had gone through the first 20 days of 2months, and checked this in 4 browsers.
bit of a silly default. most of the world operates in decimal format.
but thanks for your post.
Actually parseInt("123456")
Actually parseInt("123456") is slower than "123456"<<0
the test on my machine: [looptime, result]
[[388ms, -901237485], [331ms, -901237485], [330ms, -901237485], [334ms, -901237485]]
benchmark:
s="-901237485"; n=100000; x=y=z=a=0;
d1=new Date().getTime();
for (i=0;i<n;i++)x=parseInt(s,10);
d2=new Date().getTime();
for (i=0;i<n;i++)y=s<<0;
d3=new Date().getTime();
for (i=0;i<n;i++)z=s>>0;
d4=new Date().getTime();
for (i=0;i<n;i++)a=s|0;
d5=new Date().getTime();
[[d2-d1,x],[d3-d2,y],[d4-d3,z],[d5-d4,a]]
Great tip thank you very
Great tip
thank you very much
I remember having this issue
I remember having this issue a couple of years ago and in a new project, ran across it again. Yours was the first result in my Google search and it was a spot on fix... thank you!
Thank your for this tip. I
Thank your for this tip. I was very confused about this problem. First i started if-clauses with if(i = "0-1")... oh man :D
This helped me today :)
This helped me today :) Thanks...
You lifesaver - this annoyed
You lifesaver - this annoyed me so much ! :D
Thank you thank you thank you :D
Thank you so much :D
Thank you so much :D
THANKSSSSSSSSSSSSSS
THANKSSSSSSSSSSSSSS
First off let me say thank
First off let me say thank you. I would like to spend 15 hours punching the person in the face who thought of this for wasting everyone's time and making programming harder for no reason. Use defaults!! Everyone expects them. If the pattern of parsInt(every number and every patter except 08 and 09) works why would this one exception make ANY sense??? People use javascript for parsing everyday text. It is the language of the web. We aren't crunching binary. It is a fringe case by FAR. I've lost hours on this problem because there is no way I thought it could be in the language. It isn't even on the W3C website. Thank you so much for pointing this bug out.
-Nick