2014-05-05 19 views
0

我使用angularjs,我想解析字符串到我的代碼看起來像這樣的日期:Angularjs +時刻-JS返回錯誤的日期

var d=moment.utc("2011-10-02T22:00:00.000Z", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); 
      var year =d.year(); 
      var month =d.month(); 
      var day =d.day(); 
      $log.log("MOMENTS:"+"year: "+year+" month: "+month+" day: "+day); 

日期應爲「2011年10月3日」

但在日誌中是:時間:年:2014月:2日:6

這個日期是完全錯誤的,爲什麼是這樣,我錯了什麼?我想提取日,月和年

回答

1

這裏是一個小提琴:http://jsfiddle.net/FGa2J/

moment.day()返回周)當天(而不是每月天數),你需要moment.date(那。 moment.month()是基於0的,所以10月份你會得到9。此外,似乎時刻可以解析您的日期字符串就好了,而無需指定格式。從小提琴

代碼:

report ("2011-10-02T22:00:00.000Z", ["yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"]); 

var d = moment("2011-10-02T22:00:00.000Z"); 
var year = d.year(); 
var month = d.month(); 
var day = d.date(); 
console.log("MOMENTS:"+"year: "+year+" month: "+(month+1)+" day: "+day); 

function report(dateString, formats) { 
    $("#results").append (
     $("<li>", { text: 
     dateString + " is valid: " + moment(dateString, formats).isValid() 
       }) 
    ); 
} 
+0

hm它工作,如果我將我的字符串直接添加到像你的例子中的moments.js ..但爲什麼這不工作,如果我提供的格式? var d = moment.utc(「2011-10-02T22:00:00.000Z」,「yyyy-MM-dd'T'HH:mm:ss.SSS'Z'」);或者是我的格式錯誤? – user2115378

+0

我找不到任何有關如何將轉義添加到分析字符串的文檔。不知道它甚至支持?可能不得不挖掘當下的來源。 – aet

1

您沒有使用正確的string formatting characters

您有:"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"

在那一刻,那就是:"YYYY-MM-DDTHH:mm:ss.SSSZ"

注意,它是區分大小寫的,而不一定與從其他語言(.NET,PHP等)格式。

但是 - 由於這是ISO-8601標準格式,因此它會被自動檢測和支持。您應該簡單地省略該參數。

the documentation

... Moment.js不,如果你使用的是ISO-8601字符串,並正確地分析無格式字符串檢測。