我有以下JavaScript:http://jsfiddle.net/5Hapw/
选择日期时,变量会提醒说时间戳 - 但是,在任何月份的第8天和第9天,时间戳总是错误的。
谁能看到我哪里出错?
提前致谢。
答案 0 :(得分:4)
您的问题是将字符串解析为数字。如果你没有指定基数,并且字符串以零开头,它将被解析为八进制数字:
parseInt("017") === 15
parseInt("08") === 0 // because 8 is not a valid digit in octal numbers
解决方案是指定基数10:
parseInt("08", 10) === 8
答案 1 :(得分:2)
如果你没有将第二个参数传递给parseInt(基础),javascript会猜测它。这可能是猜错了。将10输入作为所有parseInt调用的第二个参数(你可以删除从月份截断零的代码 - 偶然添加此代码以从月中截断零也将起作用)
更新了小提琴:http://jsfiddle.net/5Hapw/4/
答案 2 :(得分:1)
通过将其转换为数字,可以解决此问题 - 将parseInt(selection[0])
替换为Number(selection[0])
。
答案 3 :(得分:0)
实际上javascript在八进制值中解释这些变量,请使用将它们转换为十进制。我相信你正在使用一个字符串并将其解析为一个值。这样的事情。那么请做以下事情。
parseInt(month_val);
这是我用来检查有效日期的代码片段。
var birthdate = element.value.split("-");
var JDate = new Date(parseInt(birthdate[2],10), parseInt(birthdate[0],10) -1, parseInt(birthdate[1],10));
valid = (parseInt(birthdate[0],10) - 1 == JDate.getMonth() && parseInt(birthdate[1],10) == JDate.getDate() && parseInt(birthdate[2],10) == JDate.getFullYear());
return valid;
答案 4 :(得分:0)
我不知道您为什么尝试解析 date 参数(通过拆分)?参数 inst 包含下一个字段:
以及更多......
Date.UTC(inst.selectedYear,inst.selectedMonth,inst.selectedDay);