Преобразовать строку в datetime в javascript и сравнить с текущим временем
Я пытаюсь забрать значение из datetimepicker tetxbox и сравнить эти значения с текущим временем.
//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);
Вы должны использовать этот метод
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/