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

时间:2013-01-14 02:55:36

标签: javascript date datetime

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

3 个答案:

答案 0 :(得分:7)

您遇到了时区问题。您的JS引擎将字符串解释为UTC,因为没有进一步指定。来自specification of Date.parse(由new Date使用):

  

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

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

答案 1 :(得分:2)

至于Firefox's caseRFC2822表示date specifications必须用Folding White Space分隔。尝试(new Date('2012 12 01')).getMonth();使用-作为分隔符似乎没有定义。

答案 2 :(得分:0)

错误是由于第01天前缀为0而产生的错误。不确定为什么会这样,但如果你在1之前删除零,它会给你正确的月份(11)。

此外,如果这意味着什么,它会在十月开始给出错误的月份。

短期修复,使用1代替01。