Проверьте две даты этого формата "дд-ммм-гггг" в javascript - PullRequest
3 голосов
/ 18 августа 2010

У меня есть две даты 18-Aug-2010 и 19-Aug-2010 этого формата.Как узнать, какая дата больше?

Ответы [ 5 ]

8 голосов
/ 18 августа 2010

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

function customParse(str) {
  var months = ['Jan','Feb','Mar','Apr','May','Jun',
                'Jul','Aug','Sep','Oct','Nov','Dec'],
      n = months.length, re = /(\d{2})-([a-z]{3})-(\d{4})/i, matches;

  while(n--) { months[months[n]]=n; } // map month names to their index :)

  matches = str.match(re); // extract date parts from string

  return new Date(matches[3], months[matches[2]], matches[1]);
}

customParse("18-Aug-2010");
// "Wed Aug 18 2010 00:00:00"

customParse("19-Aug-2010") > customParse("18-Aug-2010");
// true
3 голосов
/ 19 августа 2010

Нативный Date может анализировать "МММ + дд гггг", что дает:

function parseDMY(s){
  return new Date(s.replace(/^(\d+)\W+(\w+)\W+/, '$2 $1 '));
}
+parseDMY('19-August-2010') == +new Date(2010, 7, 19) // true
parseDMY('18-Aug-2010') < parseDMY('19-Aug-2010')     // true
3 голосов
/ 18 августа 2010

Вы можете выполнить синтаксический анализ вручную для вашего заданного формата, но я бы посоветовал вам использовать библиотеку date.js , чтобы проанализировать даты для объектов Date и затем сравнить. Проверьте это, это круто!

И, кроме того, это отличное дополнение к вашей утилите js toolbox.

1 голос
/ 18 августа 2010

Во-первых, формат 'dd-MMM-yyyy' не является допустимым входным форматом конструктора Date (он возвращает объект "недопустимая дата"), поэтому нам нужно проанализировать это самостоятельно. Давайте напишем функцию для возврата объекта Date из строки в этом формате.

function parseMyDate(s) {
    var m = ['jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec'];
    var match = s.match(/(\d+)-([^.]+)-(\d+)/);
    var date = match[1];
    var monthText = match[2];
    var year = match[3];
    var month = m.indexOf(monthText.toLowerCase());
    return new Date(year, month, date);
}

Date объекты неявным образом приводят к числу (число миллисекунд с 1970 года; время эпохи), поэтому вы можете сравнивать их с помощью обычных операторов сравнения:

if (parseMyDate(date1) > parseMyDate(date2)) ...
0 голосов
/ 30 июня 2014

Обновление: IE10, FX30 (и, вероятно, больше) будут понимать «18 августа 2010» без черточек - Chrome обрабатывает либо

, поэтому Date.parse("18-Aug-2010".replace("/-/g," ")) работает в этих браузерах (и более)

Демонстрация в реальном времени

Следовательно

function compareDates(str1,str2) {
  var d1 = Date.parse(str1.replace("/-/g," ")),
      d2 = Date.parse(str2.replace("/-/g," "));
  return d1<d2;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...