2013-03-12 224 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(); 
}; 
相關問題