您的位置:首页 > 编程语言 > Python开发

python 多线程就这么简单(续)

2016-04-19 11:15 661 查看
有这么一个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)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: