`
soulshard
  • 浏览: 102833 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

parseInt()函数引发的惨案

阅读更多
有这么一个JavaScript函数,目的是想判断两个形式为“YYYY-MM-DD hh:mm:ss”或“YYYY/MM/DD hh:mm:ss”的字符串表示的日期的先后顺序,代码如下:
function dateToSecond(date) {
	var regex = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;
	var result = date.match(regex);
	return parseInt(result[1]) * 12 * 30 * 24 * 60 * 60
			+ parseInt(result[3]) * 30 * 24 * 60 * 60 + parseInt(result[4]) * 24 * 60 * 60
			+ parseInt(result[5]) * 60 * 60 + parseInt(result[6]) * 60
			+ parseInt(result[7]);
}
		
function isBefore(start, end) {
	return dateToSecond(start) < dateToSecond(end);
}

这个函数看上去好像没错,但实际运行的时候就会出现很诡异的情况:用"2009-03-05 12:00:00"和"2009-03-07 12:00:00"作为参数,运行结果为true;但是用"2009-03-07 12:00:00"和"2009-03-09 12:00:00"作为参数,运行结果为false。

问题就出在parseInt()函数上:
引用

parseInt 方法
返回由字符串转换得到的整数。

parseInt(numString, [radix])

参数
numString
必选项。要转换为数字的字符串。

radix
可选项。在 2 和 36 之间的表示 numString 所保存数字的进制的值。如果没有提供,则前缀为 '0x' 的字符串被当作十六进制,前缀为 '0' 的字符串被当作八进制。所有其它字符串都被当作是十进制的。

说明
parseInt 方法返回与保存在numString中的数字值相等的整数。如果numString的前缀不能解释为整数,则返回NaN(而不是数字)。

parseInt("abc") // 返回 NaN。
parseInt("12abc") // 返回 12。
可以用isNaN方法检测NaN。

因此,parseInt("08")和parseInt("09")的结果都为0,才导致了上面的那个错误。对于0开头的10进制数,正确的方法应该是parseInt(numString, 10)。
分享到:
评论

相关推荐

    js中parseInt函数浅谈

    parseInt(number,type)这个函数后面如果不跟第2个参数来表示进制的话,默认是10进制。比如说parseInt(“010”,10)就是10进制的结果:10,parseInt(“010”,2)就是2进制的结果:2,parseInt(“010”,8)就是8进制的...

    javascript parseInt 函数分析(转).docx

    ### JavaScript中的`parseInt`函数分析 #### 一、引言 在JavaScript编程中,`parseInt`函数是一个常用且重要的函数,用于将字符串转换为整数。然而,在使用`parseInt`时,开发者可能会遇到一些意料之外的行为,...

    ParseInt函数参数设置介绍

    我们经常用ParseInt函数转换字符串为int数值,ParseInt函数有两个参数可以设置,其中第二个参数可以缺省。 ParseInt(“字符串”,使用的进制) var num1=ParseInt(“10”,2)//2 var num1=ParseInt(“10”,8)//8 var ...

    Javascript中使用parseInt函数需要注意的问题

    JavaScript中的parseInt函数是用于将字符串转换为整数的内置函数,但是在使用时有一些需要注意的问题。首先,parseInt函数在不同的浏览器环境下可能会有不同的默认行为,这在IE8及更早版本的浏览器中表现得尤为明显...

    javascript parseInt与Number函数的区别.docx

    #### 二、parseInt函数详解 ##### 1. 定义 `parseInt`函数的主要作用是解析一个字符串并返回一个整数。该函数可以接受两个参数:一个是待解析的字符串,另一个是基数(可选)。基数用于指定待解析字符串的进制,...

    golang中strconv.ParseInt函数用法示例

    本文实例讲述了golang中strconv.ParseInt函数用法。分享给大家供大家参考,具体如下: golang strconv.ParseInt 是将字符串转换为数字的函数,功能灰常之强大. 参数1 数字的字符串形式 参数2 数字字符串的进制 比如二...

    javascript parseInt与Number函数的区别

    `JavaScript`中的`parseInt`和`Number`函数都是用来将字符串转换为数字的,但它们在处理字符串的方式上存在显著的差异。 `parseInt`函数的主要功能是解析一个字符串参数,并根据指定的基数(radix)返回一个整数。...

    JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法

    主要介绍了JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法,因转换的字符串数字都以0开头,导致parseInt函数在浏览器和Android WebView中转换结果不一样,本文给出了解决方法,需要的朋友可以参考下

    javascript parseInt 函数分析(转)

    ### JavaScript的parseInt函数详解 #### 一、概述 在JavaScript编程语言中,`parseInt`函数是一种常用的方法,用于将字符串转换为整数。虽然大多数开发者对其基本用途有所了解,但在某些特定情况下,`parseInt`的...

    Javascript 函数parseInt()转换时出现bug问题

    在JavaScript编程中,`parseInt()`函数是一个非常常用的工具,用于将字符串转换成整数。然而,这个函数在处理特定情况时可能会出现不预期的行为,正如标题和描述中提到的“bug问题”。这个问题主要体现在当`parseInt...

    javaScript parseInt字符转化为数字函数使用小结

    在JavaScript编程中,parseInt函数是一个非常重要的工具,它用于将字符串转换成整数。但是,这个函数在使用时有一定的复杂性和需要注意的地方。下面将详细介绍parseInt函数的使用方法和技巧,并对一些常见问题进行...

    js parsefloat parseint 转换函数

    js parsefloat parseint JavaScript提供了3个显式的类型转换函数,分别是eval&#40;&#41;、parseInt()和parseFloat()。 eval&#40;&#41;函数:将字符串表达式转换成数字值。例如,语句total=eval&#40;“432.1*10”&#41...

    javaScript parseInt字符转化为数字函数使用小结.docx

    ### JavaScript中的parseInt函数详解 #### 一、概述 在JavaScript编程中,`parseInt()`函数是一个非常重要的工具,用于将字符串转换成整数。它在处理数据格式化、表单验证等场景时尤其有用。本文旨在深入探讨`...

    javascript parseInt() 函数的进制转换注意细节.docx

    ### JavaScript `parseInt()` 函数的进制转换注意事项 #### 概述 `parseInt()` 是 JavaScript 中一个非常常用的方法,主要用于将字符串转换成整数。它接受两个参数:第一个参数是要转换的字符串,第二个参数则是该...

    转换类型(转换为数字)转换类型Number()、parseInt()、parseFloat的区别

    其中,Number()、parseInt()、parseFloat() 是三个常用的转换类型函数,每个函数都有其独特的特性和处理方式。 一、Number() 函数 Number() 函数是一个强制类型转换函数,它可以将其他数据类型转换为数字类型。...

Global site tag (gtag.js) - Google Analytics