2013-03-12 170 views
3

我有这两个函数创建一个正确格式的新字符串(mm-dd-yyyy),但现在它似乎不能很好地工作...当我输入日期31-03-2013这是一个有效的日期,它出来与04-01-2013在第一后的一个月....日期将2013年4月1日而不是2013年3月31日

这里有两个功能:

Date.prototype.sqlDate = Date.prototype.sqlDate || function() { 
    return this.getMonth() + "-" + this.getDate() + "-" + this.getFullYear(); 
}; 

String.prototype.sqlDate = String.prototype.sqlDate || function() { 
    var date = new Date(0); 
    var s = this.split("-"); 
    //If i log "s" here its output is: 
    // ["31", "03", "2013", max: function, min: function] 
    date.setDate(s[0]); 
    date.setMonth(s[1]); 
    date.setYear(s[2]); 
    return date.sqlDate(); 
}; 
+2

请记住,JavaScript将返回基于0的月份值,而日期和年份将基于1。所以一月份就会是0. – 2013-03-12 21:17:30

+1

呵呵。忘了这个。 – FabianCook 2013-03-12 21:18:06

+1

Javascript的这个“特性”是我遇到过的最愚蠢的设计决定之一。 – 2013-03-12 21:19:18

回答

8

月日的0-扬之间的数和11-Dec,

所以3是四月...

这是非常烦人,因为:

  • - 1到31之间一个基于索引
  • - 0〜11从零开始的索引。

呃... javascript的规格...继续。

MDN

你可以使用这个设置是正确的:

date.setMonth(parseInt(s[1], 10) - 1); 

你可以看到它在这里工作:

example

+0

有时我只是忽略这样的事情,因为月是唯一的一个.... – FabianCook 2013-03-12 21:19:24

3

试试这个:

String.prototype.sqlDate = String.prototype.sqlDate || function() { 
    var date = new Date(0); 
    var s = this.split("-"); 
    //If i log "s" here its output is: 
    // ["31", "03", "2013", max: function, min: function] 
    date.setDate(s[0]); 
    date.setMonth(parseInt(s[1],10)-1); 
    date.setYear(s[2]); 
    return date.sqlDate(); 
}; 
相关问题