Javascript之parseInt注意事项一例

来源:互联网 发布:郑州网络布线 编辑:程序博客网 时间:2024/05/14 02:21

参与一个项目,在一个功能中需要在前台提取2个日期(beginDate,endDate)的月份差进行计算,日期格式为yyyy-mm-dd,然后没怎么细想就写了一段代码如下

var beginYear=beginDate.substr(0,4);var beginMonth=parseInt(beginDate.substr(5,2));var endYear=endDate.substr(0,4);var endMonth= parseInt(endDate.substr(5,2));var yearGap =endYear-beginYear;var monthGap=endMonth-beginMonth;    var monthCount= yearGap*12+1+monthGap;
然后稍微测试了几个日期,没有问题,就发布了,结果客户在实际使用中发现,大部分情况计算正确,但是唯独有一个日期的计算死活不正确,就是2016-09-30,其余的都没有问题,我就想怎么可能呢,于是就就测试了下:

for(var i=0;i<=9;i++){var val ='0'+i;alert(val);        alert(parseInt(val));}

居然 parseInt('09')=0

彻底颠覆我了的三观,仔细一查资料才发现,原来是自己的认识不清,W3School上的说明如下:

parseInt(string, radix)

  string必需。要被解析的字符串。radix

可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。

如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。

如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。

原因找到了,解决办法也就有了,修改如下:

var beginYear=beginDate.substr(0,4);var beginMonth=parseInt(beginDate.substr(5,2),10);var endYear=endDate.substr(0,4);var endMonth= parseInt(endDate.substr(5,2),10);var yearGap =endYear-beginYear;var monthGap=endMonth-beginMonth;    var monthCount= yearGap*12+1+monthGap;
OK!



0 0
原创粉丝点击