(新日期('2012-12-01')).getMonth()=== 10?

dbk*_*lun 6 javascript datetime date

(new Date('2012-12-01')).getMonth()10代替11(getMonth为0索引).我已经在Firefox,Chrome和Node.js上测试过了.为什么会这样?

Ber*_*rgi 7

您遇到了时区问题.您的JS引擎将字符串解释为UTC,因为没有进一步指定.从(使用的)规范Date.parsenew Date:

String可以解释为本地时间,UTC时间或某个其他时区的时间,具体取决于String的内容.该函数首先尝试根据日期时间字符串格式(15.9.1.15)中调出的规则来解析字符串的格式.如果String不符合该格式,则该函数可以回退到任何特定于实现的启发式或特定于实现的日期格式.

在您的时区,日期时间是Nov 30 2012 19:00:00 GMT-0500- 11月.使用.getUTCMonth(),你会得到十二月.但是,永远不要相信Date.parse,每个浏 因此,如果您不在Node.js等受限制的环境中,则应始终解析您的字符串(例如使用正则表达式)并将其提供给new Date(Date.UTC(year, month, date, …)).