2010-11-13 19 views

回答

8

可以簡單地分析字符串:

var year = parseInt(dateString); 

解析將結束在破折號,作爲可以不是整數的一部分(除了作爲第一個字符)。

+2

+1,最簡單最好,使用Date對象只是一個矯枉過正的問題,應該避免使用,因爲ISO-8601格式沒有得到廣泛的支持-yet-,'parseInt'沒有問題。我可能也會使用'dateString.slice(0,4);' – CMS 2010-11-13 00:37:21

+0

這是糟糕的抽象和臨時的。 – episodeyang 2018-01-20 23:26:43

0

您可以簡單地使用 -

var dateString = "2010-02-02T08:00:00Z"; 
var year = dateString.substr(0,4); 

如果年份始終保持在年線的位置前面。

+2

請注意,'String.prototype.slice'通常比'substr'更受歡迎,因爲它在實現中有幾個錯誤,例如JScript(IE <= 8),它不能處理負向索引。兩者都是ECMAScript標準的一部分,但'substr'是* non-normative *,意味着符合標準的實現並不是嚴格要求實現'substr'。 – CMS 2010-11-13 00:19:42

+0

@CMS:哇,我不知道,我已經想知道爲什麼你喜歡'slice'而不是'substr';每天... – 2010-11-13 00:58:12

1
var year = '2010-02-02T08:00:00Z'.substr(0,4) 

...

var year = new Date('2010-02-02T08:00:00Z').getFullYear() 
7

這是一個日期,使用JavaScript的內置Date功能...

var d = new Date('2011-02-02T08:00:00Z'); 
alert(d.getFullYear()); 
+1

看到我的[評論@ Rob](http://stackoverflow.com/questions/4170117/how-to-parse-the-year-from-this-date-string-in-javascript#comment-4503426 )...提示:[試試](http://jsbin.com/aruge4/edit)在IE8或更低版本中,甚至在舊的Firefox版本中,它根本無法工作... – CMS 2010-11-13 00:31:36

+1

啊謝謝!我沒有意識到這一點。這就是說,在處理日期時,我發現使用日期函數而不是使用split/substr總是個好主意。這是一個例外,謝謝你的提升。 – 2010-11-15 15:29:20

5

我認爲正確的方法是

var year = (new Date('2010-02-02T08:00:00Z')).getFullYear(); 

var date = new Date('2010-02-02T08:00:00Z'); 
var year = date.getFullYear(); 

因爲它允許您稍後進行其他日期操作,如果您需要並且如果日期格式發生變化也將繼續工作。

更新:傑森本森指出,日期將解析它給你。所以我刪除了無關的Date.parse調用。

+2

對於這種情況,「適當」的方式恕我直言,這只是一個矯枉過正的問題,因爲由ECMAScript 3中的Date構造函數和Date.parse方法處理的格式是**實現相關**,ISO-8601格式最近由ECMAScript 5引入,這意味着你會發現不能解析該格式的實現。他只是想要前四個charaacters,我只需要去'dateStr.slice(0,4)'...... – CMS 2010-11-13 00:23:16

+1

@CMS,至少人們應該知道有一種正式的方式,即使事實證明它在IE或任何地方無法使用。使用slice(或substr或split)解析日期與使用正則表達式來解析xml一樣糟糕,即使您沒有可用的像樣的xml解析器。 – 2010-11-13 00:40:09

+1

我不同意:沒有「官方」的方式來獲得這種格式的字符串的年份,一個子字符串就足夠了。 「日期」對象可能比較方便的唯一情況是您住在GMT以外的其他時區,因爲當年的數字在除夕之後的世界各地有所不同。 – 2010-11-13 00:56:25