Преобразовать строку в datetime в javascript и сравнить с текущим временем

Я пытаюсь забрать значение из datetimepicker tetxbox и сравнить эти значения с текущим временем.

JSFiddle

        //startTime textbox text = 19/12/2014 03:58 PM
        var startTime = Date.parse($('[id$=txtStartDate]').val().toString());

        //endTime textbox text = 19/12/2014 04:58 PM
        var endTime = Date.parse($('[id$=txtEndDate]').val().toString());

        var currentTime = Date.now();
        alert(startTime);
        alert(endTime);
        alert(currentTime);

        if (currentTime >= startTime && currentTime <= endTime) {
              alert();

        }

Date.parse () используется для преобразования строки в миллисекунды с 1 января 1970 года. Date.now() возвращает текущую дату в миллисекундах с 1 января 1970 года.

Но вышеупомянутые методы преобразования не работают должным образом. Какой должна быть логика, чтобы сравнивать дату и время по первой строке преобразования в формате, подобном 19.12.2014, 15:58, в объект Date и затем сравнивать.

3 ответа

Решение

Поскольку этот формат не задокументирован как поддерживаемый Date.parse Лучше всего разобраться самому, что не сложно: используйте String#split или регулярное выражение с группами захвата, чтобы разбить его на отдельные части, используйте parseInt чтобы преобразовать части, которые являются числовыми строками, в числа (или, с таким контролируемым вводом, просто используйте унарный + на них), а затем использовать new Date(...) использовать эти цифры, чтобы создать Date пример.

Одна ошибка: month ценить это new Date ожидает, начинается с нуля, например, 0 = январь. Также не забудьте добавить 12 к значению часов, если вход использует AM/PM вместо 24-часовых часов.


Или, конечно, используйте любую из нескольких библиотек обработки даты / времени, например MomentJS.

Проблема в Date() ожидает формат даты мм / дд / гггг, поэтому ваша дата недействительна.

Вы можете исправить свою дату следующим образом:

function toValidDate(datestring){
    return datestring.replace(/(\d{2})(\/)(\d{2})/, "$3$2$1");   
}

var startTime = Date.parse(toValidDate($('[id$=txtStartDate]').val().toString())); 
var endTime = Date.parse(toValidDate($('[id$=txtEndDate]').val().toString()));    
var currentTime = Date.now();

alert(startTime);
alert(endTime);
alert(currentTime);

ДЕМО: http://jsfiddle.net/3mztdaja/3/

Вы должны использовать этот метод

var startTime  = new Date(year, month, day, hours, minutes, seconds, milliseconds);

это демо http://jsfiddle.net/hswp7x8k/

чтобы извлечь значение из строки, вы можете использовать этот метод

dd = '19/12/2014 03:58';
dd.match(/(\d+)\/(\d+)\/(\d+)\s*(\d+):(\d+)/);

это демо http://jsfiddle.net/w3wow1ay/2/

Другие вопросы по тегам