2013-02-08 5 views
25

У меня две строковые даты в формате m/d/yyyy. Например, «11/1/2012», «1/2/2013». Я пишу функцию в JavaScript для сравнения двух строковых дат. Подпись моей функции: bool isLater(string1, string2),, если дата, переданная строкой1, позже даты, переданной строкой2, возвращает true, в противном случае - false. Итак, isLater ("1/2/2013", "11/1/2012") должен возвращать true. Как мне написать функцию JavaScript для этого?Как сравнить две строковые даты в javascript?

+0

Создайте два объекта Date из ваших строк и сравните их как цифры. – georg

+2

преобразует строки в собственные объекты JS datetime (см. Http://stackoverflow.com/questions/5619202/converting-string-to-date-in-js). оттуда это становится легко. –

+1

Как создать два объекта даты из строк? – GLP

ответ

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

+1

Он также работает в формате MM/dd/YYYY. @AnttiHaapala Кажется, что он работает со всем оператором. – Rajush

+2

Я отменил свой комментарий, в котором утверждал, что это не работает для '==', так как, когда я просматривал код, я думал, что он сравнивает объекты Date. Тем не менее, 'Date.parse' возвращает целое число (теперь как это удобно), и этот код будет работать и для равенства. Тем не менее, будьте осторожны, что 'new Date ('2015-10-10') == new Date ('2015-10-10')' false! –

5

разбирает даты и сравнить их, как вы бы номера:

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

Если вам необходимо поддерживать другой формат даты рассмотреть библиотеку, такие как date.js.

+1

Хотелось бы отметить, что это работает только для операторов сравнения, а не для равенства '==' или '! ='. –

+2

Это не работает для формата DD/MM/yyyy, почему кто-нибудь может рассказать мне? –

+0

Он не работает для формата dd-MM-yyyyy – meenu1meen

3

Вы можете просто сравнить 2 строки

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

Тогда

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

возвращает истину, а

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

возвращает false

+1

'' 2017/10/26 ">" 2017/10/7 "' дает 'false': D – ahmadalibaloch

+0

ahmadalibaloch Я думаю, повторно приняв здесь. Вы правы, что '' 2017/10/26 ">" 2017/10/7 "' дает 'false', но это потому, что вы используете'> 'я думаю.потому что 'isLater (" 2017/10/26 ">" 2017/10/07 ")' дает 'false', но если вы правильно запустите функцию, как ' isLater («2017/10/26», «2017/10/07 ")' вы получаете 'true' – CaseyC

1

Если ваша дата не в формате standar yyyy-mm-dd (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 
Смежные вопросы