在JavaScript中,Date对象的getMonth()方法返回的月份需要+1,如取当前月份:
var oDate = new Date(); console.log( oDate.getMonth()+1 );//取当前月份,需要加1 console.log( oDate.getFullYear() );//取当前年份,不需要加1 console.log( oDate.getDate() );//取当前日,不需要加1
然而取年份,取日,时,分,秒则不需要,为什么只有月份要+1,这让很多JavaScript开发者不解,以为会有什么不得以的原因。经过查阅资料才知道就是一个坑。
科学解释:因为 JavaScript 的 Date 实现是从 Java JDK 1.0 里抄来的,这个坑是Java挖的。除了这个坑,还有 getYear 返回的是当前年份减去 1990 的差 2017-1990 = 117。
这是JavaScript之父自己在Twitter上说的:
还有一种看似十分说的通的民间解释:
因其它如年,日,时,分,秒都是数字,所以从1开始没什么问题。然而月份是有英文名称的 January、February...,它们存于数组中["January","February",...],所以是从0开始就说的通了。
所以Datel.getMonth()是0~11其实没什么技术原因。完全是JavaScript语言的创作者抄Java JDK时,连这个坑也抄来了。后面因为要考虑语言的向下向上兼容问题,这个坑也就没有改了。