Javascript для сравнения двух дат, из строк, начало <= конец - PullRequest
5 голосов
/ 25 февраля 2010

Я получаю две строки в формате (бразильский формат): «ДД / ММ / ГГГГ», мне нужно сравнить обе. Поскольку первое поле является началом, а последнее - концом,

Моя проверка начала <= end </p>

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

Ответы [ 6 ]

8 голосов
/ 25 февраля 2010

Не используйте 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);

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

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

function isValid(start, end) {
    return start.getTime() < end.getTime();
}
5 голосов
/ 25 февраля 2010

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

2 голосов
/ 25 февраля 2010

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

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

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

1 голос
/ 11 ноября 2012

Новый «жар» в мире времени JS: http://momentjs.com/ Подходит и для этого варианта использования

1 голос
/ 25 февраля 2010

Быстро и грязно:

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

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

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

0 голосов
/ 25 февраля 2010

Вот все доступные конструкторы для объектов даты в 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: Примечание: Month в Javascript начинается с нуля, поэтому 1 января 2010 года будет new Date(2010, 0, 1), а 31 декабря 2011 года - new Date(2010, 11, 31).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...