2015-06-16 2 views
0

У меня есть дата в формате «16-Jun-2015», и мне нужно сравнить ее с сегодняшней датой, чтобы увидеть ее не больше.Сравнение String по сегодняшний день

С моей даты ввода является строка, я сначала преобразуется в дату объекта:

new Date("16-Jun-2015"); 

Тогда я принял это сравнить с сегодняшней даты:

if(date.compare(new Date("16-Jun-2015"), new Date()) > 0){ 
    //Do stuff if input is larger than today's date 
} 

The новый Date ("16 -Jun-2015 ") возвращает значение 'Недействительная дата.' Как я могу сравнить эти даты? Я также не могу использовать сторонние библиотеки Date, поскольку у меня нет всей базы кода, с которой я работаю.

Дублированное сообщение вопроса неверно, поскольку в этом вопросе отображается только синтаксический анализ, но не сравнение.

+1

[Date.parse()] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse) – melancia

+0

Что такое 'date.compare' Что это за функция? –

+0

Возможный дубликат [javascript Date.parse] (http://stackoverflow.com/questions/2587345/javascript-date-parse) – melancia

ответ

1

Поскольку формат, который вы предоставляете, не является стандартизованным, он не гарантируется поддержкой конструктора Date.

Существует несколько подходов к решению этой проблемы, но самым простым является использование библиотеки, такой как moment.js, которая имеет свои собственные функции синтаксического анализа, которые вы можете контролировать с помощью спецификаторов формата.

Например:

if (moment("16-Jun-2015","D-MMM-YYYY").isAfter()) 
    ... 

Обратите внимание, что в этом примере, функция isAfter использует текущую дату и время, потому что он не был принят никаких параметров.

Однако, так как вы сказали, что вы не можете использовать библиотеку, рассмотрим простой парсинг функцию самостоятельно, например:

var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; 

function parseDate(s){ 
    var parts = s.split("-"); 
    var d = parts[0]; 
    var m = months.indexOf(parts[1]); 
    var y = parts[2]; 
    return new Date(y, m, d); 
} 

Что вы можете просто позвонить, как так:

if (parseDate("16-Jun-2015") > new Date()) 
    ... 
+0

Благодарим за информацию! К сожалению, я не могу вставить дополнительные javascript-библиотеки в мое приложение, так как я не владею им. – user2924127

+0

@ user2924127 - Я обновил свой ответ с помощью второго подхода, который не требует библиотеки. –

+0

Работает отлично! Спасибо! – user2924127

2

Посмотрите на the documentation, окружающий объект Date в JavaScript.

По сути, использование new Date('16-Jun-2015') недопустимо, так как конструктор Date ожидает очень специфичный формат ввода.

Это означает, что вам необходимо преобразовать формат даты («16-Jun-2015») в совместимый формат: ISO-8601 или RFC2822.

Преобразование формата даты в один из этих стандартов неизбежно. Этот процесс можно упростить с помощью сторонних библиотек, таких как Moment.js.

+1

. Как сравнить ее с сегодняшней датой? – user2924127

+1

Вам нужно будет преобразовать формат даты в стандартный формат, принятый объектом 'Date' JavaScript. –

+0

'Date.parse()' по-прежнему требуется совместимая строка даты, либо в ISO-8601, либо RFC2822. –

Смежные вопросы