JavaScript для сравнения двух дат, от строк, начинает <= конец

Я получаю две строки, форматированные как (бразильский Формат): "DD/MM/YYYY", я должен сравнить обоих. Так как первое поле является начинанием, и последним является конец,

Моя проверка, начинают <= конец

Date.new (начинаются), генерирует 'недопустимую дату' даже на ISO!

5
задан Saravanan 4 March 2014 в 12:38
поделиться

5 ответов

Не используйте Date.new. Используйте new Date(). Из-за формата вашей строки даты я бы рекомендовал брать каждое поле отдельно и передавать их в конструктор:

var startYear = parseInt(document.getElementById('startYear'), 10);
var startMonth = parseInt(document.getElementById('startMonth'), 10) - 1; // as per Residuum's comment
var startDay = parseInt(document.getElementById('startDay'), 10);
var start = new Date(startYear, startMonth, startDay);

и т.д. Если вам передана строка даты, то вы можете использовать метод fuzzy lollipop для получения каждого поля из строки. Однако я не уверен, что конструктор Date будет принимать непарсированные строки для отдельных полей.

После того, как у вас есть две даты, которые вы хотите сравнить, просто сравните их значения в миллисекундах с эпохи:

function isValid(start, end) {
    return start.getTime() < end.getTime();
}
8
ответ дан 18 December 2019 в 09:49
поделиться

Вы можете сделать это, если знаете, что ваша дата всегда будет отформатирована одинаково dd/mm/yyy

today = "23/02/1001";
dateComponents = today.split("/");
date = new Date(dateComponents[2], dateComponents[1] - 1, dateComponents[0]);

но лучшим решением будет посмотреть на этой странице Datejs, который является хорошей альтернативой для обработки даты.

2
ответ дан 18 December 2019 в 09:49
поделиться

Существует хорошая библиотека обработки дат, называемая datejs, в которой есть метод parseExact(dateStr, format).

5
ответ дан 18 December 2019 в 09:49
поделиться

Quick 'n dirty :

function is_valid (start , end) {
     return start.split('/').reverse().join('') <= end.split('/').reverse().join('') ;
}

То есть, разделите дату на компоненты, снова соедините их в обратном порядке и выполните сравнение строк.

Edit: Как отмечено в комментарии, конечно, это не сработает, если ваши месяцы/дни меньше 10 не имеют нулевой прокладки.

1
ответ дан 18 December 2019 в 09:49
поделиться

Вот все доступные конструкторы для объектов даты в Javascript:

dateobject = new Date(); // returns date of current time stamp
                         // on the browser
dateobject = new Date("Month Day, Year Hours:Minutes:Seconds");
dateobject = new Date(Year, Month, Day);
dateobject = new Date(Year, Month, Day, Hours, Minutes, Seconds);
dateobject = new Date(Milliseconds);

Выберите тот, который вы хотите использовать, но я бы выбрал new Date(Year, Month, Day); в вашем случае.

EDIT: Примечание: Месяц в Javascript основан на нулях, поэтому 1 января 2010 года будет new Date(2010, 0, 1), а 31 декабря 2011 года будет new Date(2010, 11, 31).

0
ответ дан 18 December 2019 в 09:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: