JavaScript setFullYear()方法返回错误的日期
JavaScript setFullYear() Method Returning an incorrect date
今天早上,我注意到JavaScript setFullYear方法出现了一个特殊问题。
当使用这样的方法时:
d.setFullYear(2012,2,8);
返回正确的值:
Thu Mar 08 2012 10:30:04 GMT+0000 (GMT Standard Time)
但是,如果我使用parseInt方法返回整数,则返回的日期不正确:
d.setFullYear(parseInt("2012"), parseInt("02"), parseInt("08"));
退货:
Wed Feb 29 2012 10:31:30 GMT+0000 (GMT Standard Time)
parseInt方法似乎返回了不正确的值,但当我测试它时:
document.write(parseInt("2"));
然后返回正确的值(2)
一把正在工作的小提琴在这里:http://jsfiddle.net/rXByJ/
问题出在parseInt还是setFullYear?
问题是parseInt('08')
就是0
。这项工作:
d.setFullYear(parseInt("2012"), parseInt("02"), 8);
parseInt("08")和parseInt("09")都返回零,因为函数试图为数值系统确定正确的基数习惯于在Javascript中,以零开头的数字被视为八进制八进制中没有08或09,这就是问题所在。
http://www.ventanazul.com/webzine/articles/issues-parseint-javascript
解决方案是使用第二个参数:
parseInt('08', 10)
或
Number('08')
另请参阅如何处理JavaScript';s parseInt八进制行为?
stackoverflow上的这篇文章非常详细地解释了为什么应该将parseInt与base
或radix
一起使用
是的,这是真的parseInt('08')将返回0而不是8,因为它将08作为八进制数并转换为0,所以您应该使用parseInt('08`,10),其中第二个参数指定转换的基数,即十进制的10
所以简而言之,使用parseInt时总是指定base:)
如果您可以重写Date.prototype.setFullYear()
函数,使其返回日期对象而不是毫秒,则可以执行此操作。
Date.prototype.setFullYear = (function(ref){
return function(val){
return new Date(ref.bind(this)(val));
}
})(Date.prototype.setFullYear)
- ui网格日期单元格过滤器,过滤日期格式导致显示错误的日期
- Chrome Javascript日期构造函数错误
- javascript日期减去小时-错误
- 如何修复FF和IE中的Javascript无效日期错误
- javascript创建日期的月份错误
- Javascript设置日期不起作用,显示错误的时间
- 他们网站上的代码出现启动日期选择器错误
- webkit输入类型=在错误日期发送空值的日期
- Date.js错误地分析了ISO 8601 UTC日期
- 在JavaScript中解析日期时得到错误的结果
- Jquery 日期时间选取器错误
- 显示/返回错误日期的Javascript日期
- JQuery 完整日历在月视图中的错误日期呈现事件
- 获取两个日期之间的日期返回指定日期范围之外的错误日期
- 猫鼬中的错误日期
- 在x轴折线图上绘制错误日期的高位图表(高位股票)
- 错误日期类型(Google可视化)
- 未捕获的类型错误:$(…).日期选择器上的日期选择器错误
- 未捕获类型错误:$(…).日期时间选择器不是一个函数
- 全日单击“返回错误日期”