2013-02-08 51 views
25

我有m/d/yyyy格式的兩個字符串日期。例如,「11/1/2012」,「1/2/2013」​​。我正在寫一個JavaScript函數來比較兩個字符串日期。我的函數的簽名是 bool isLater(string1, string2),如果string1傳遞的日期晚於string2傳遞的日期,它將返回true,否則返回false。 因此,isLater(「1/2/2013」​​,「2012年11月1日」)應該返回true。我如何爲此編寫JavaScript函數?如何比較javascript中的兩個字符串日期?

+0

從您的字符串中創建兩個Date對象並將它們作爲數字進行比較。 – georg 2013-02-08 20:53:57

+2

將字符串轉換爲本機JS日期時間對象(請參閱http://stackoverflow.com/questions/5619202/converting-string-to-date-in-js)。從那裏很容易。 – 2013-02-08 20:54:14

+1

如何從字符串創建兩個日期對象? – GLP 2013-02-08 20:54:41

回答

44
var d1 = Date.parse("2012-11-01"); 
var d2 = Date.parse("2012-11-04"); 
if (d1 < d2) { 
    alert ("Error!"); 
} 

Demo Jsfiddle

+1

如果日期的格式是12/31/1992,它會工作嗎? MM/dd/YYYY? – KyelJmD 2013-08-07 08:20:19

+1

它適用於MM/dd/YYYY格式。 @AnttiHaapala它似乎與所有運營商一起工作。 – Rajush 2015-12-16 19:10:03

+2

我收回了我的評論,我聲稱這不適用於'==',因爲當我瞥見代碼時,我認爲它是比較Date對象。但是,Date.parse返回一個整數(現在有多方便),這個代碼也可以用於平等。但是,請注意'new Date('2015-10-10')== new Date('2015-10-10')'爲false! – 2015-12-17 05:20:59

5

解析日期和它們當作數字比較:

function isLater(str1, str2) 
{ 
    return new Date(str1) > new Date(str2); 
} 

如果您需要支持其他日期格式考慮庫如date.js

+1

我想說明的是,這隻適用於比較運算符,不等於'=='或'!='。 – 2015-12-02 06:11:27

+2

它不適用于格式DD/MM/yyyy爲什麼有人可以告訴我?? – 2016-06-25 12:44:55

+0

它不適用于格式dd-MM-yyyyy – meenu1meen 2018-02-22 10:32:47

3

您可以簡單地比較兩個字符串

function isLater(dateString1, dateString2) { 
    return dateString1 > dateString2 
} 

然後

isLater("2012-12-01", "2012-11-01") 

返回true,而

isLater("2012-12-01", "2013-11-01") 

返回false

+1

''2017/10/26「>」2017/10/7「'給出'false':D – ahmadalibaloch 2017-10-07 12:52:18

+0

ahmadalibaloch我想你'重新在這裏弄錯了。你是對的''2017/10/26「>」2017/10/7「''給出'錯誤',但那是因爲你正在使用'>'我想。因爲'isLater(「2017/10/26」>「2017/10/07」)'給出 'false',但是如果您正確運行功能,如 'isLater(「2017/10/26」,「2017/10/07「)'你得到 'true' – CaseyC 2018-02-22 20:46:45

1

如果您的日期不是格式標準年月日(2017-02-06)例如20/06/2016。您可以使用此代碼

var parts ='01/07/2016'.val().split('/'); 
var d1 = Number(parts[2] + parts[1] + parts[0]); 
parts ='20/06/2016'.val().split('/'); 
var d2 = Number(parts[2] + parts[1] + parts[0]); 
return d1 > d2