2016-06-22 3 views
-2

У меня есть следующая проблема.jQuery проверить, если start_date больше, чем end_date

Я получаю start_date и end_date из своей HTML-формы, обе даты действительны и вводятся/выбираются с помощью выбора даты загрузки.

Пример даты является

start_date = 15-06-2016 
end_date = 14-06-2016 

У меня есть следующий код, чтобы проверить, если дата начала велика, чем дата окончания:

if (Date.parse(start_date) > Date.parse(end_date)) 
{ 
    error = true; 
    console.log('start date is greater than end date'); 
} 
else 
{ 
    console.log('start date is smaller than end date'); 
} 

дата начала больше, чем дата окончания, но в моей проверке всегда есть журналы «дата начала меньше даты окончания»

Я также пробовал следующее в своем условном заявлении, но все равно получаю те же результаты:

if (new Date(start_date) > new Date(end_date)) 
if (start.Date > date.Date) 

если переключить «>» с «<», я все еще получаю тот же результат. В заявлении всегда выполняется оператор else.

Я думаю, что преобразование из строки на сегодняшний день может быть проблемой.

Заранее спасибо

+2

Форматы дат у вас есть не может быть правильно прочитан 'Date()' конструктор (пример здесь : https://jsfiddle.net/RoryMcCrossan/4q7pdt3r/). Сначала вам нужно изменить их на формат 'mm/dd/yyyy'. –

+0

Переменные 'start_date' и' end_date' числа или строки? – guest271314

+0

это строковые значения, которые я пытаюсь преобразовать во время –

ответ

1

Вы можете использовать String.prototype.split(), Array.prototype.reverse(), Array.prototype.join(), new Date(), .getTime()

var start_date = "15-06-2016" 
 
, end_date = "14-06-2016"; 
 

 
function getTime(d) { 
 
    return new Date(d.split("-").reverse().join("-")).getTime() 
 
} 
 

 
console.log(getTime(start_date) > getTime(end_date))

+0

, это самый короткий код и первый для работы, thanx! –

0

Вместо того

start_date = 15-06-2016 
end_date = 14-06-2016 

Использование

var start_date = new Date('15-06-2016'); 
var end_date = new Date('14-06-2016'); 

Остальной код остается таким же.

+0

даты, указанные в верхней части вашего ответа, являются примерами, которые я добавил, фактические даты получены из формы я попробовал 'if (new Date (start_date)> new Date (end_date))', но получил те же результаты –

3

Этот формат даты не распознается Date.parse.

console.log(Date.parse('15-06-2016'));

Если вы хотите, чтобы признать, что вам нужно использовать формат mm/dd/yyyy или формат yyyy-mm-dd.

console.log(Date.parse('06/15/2016'));

Если вы хотите использовать пользовательский формат, вам придется реализовать свой собственный свой анализатор (например, с помощью splitting на '-') или использовать библиотеку, такие как moment.js.

console.log(moment("06-15-2016", "MM-DD-YYYY"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.min.js"></script>

0

Первая попытка преобразовать формат даты Stand ard JavaScript Формат даты, например YYYY-MM-DD, а затем вы можете проанализировать его до Date объекта. После того, как вы сделали с ним, то вы можете сделать требуемое сравнение, как показано ниже:

Стандартные форматы даты можно найти по этой ссылке: http://www.w3schools.com/js/js_date_formats.asp

var start_date = '15-06-2016'; 
 
var end_date = '14-06-2016'; 
 

 
//convert to standard date format like YYYY-MM-DD 
 
start_date = 
 
    start_date.split('-')[2]+"-"+start_date.split('-')[1]+"-"+start_date.split('-')[0] 
 

 
end_date = 
 
    end_date.split('-')[2]+"-"+end_date.split('-')[1]+"-"+end_date.split('-')[0] 
 

 
if (Date.parse(start_date) > Date.parse(end_date)) 
 
{ 
 
    error = true; 
 
    console.log('start date is greater than end date'); 
 
} 
 
else 
 
{ 
 
    console.log('start date is smaller than end date'); 
 
}

0

Вы также можете скрыть предыдущую datesfrom выбранную дату, через JavaScript.

HTML:

<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/base/jquery-ui.css" type="text/css" media="all"><label for="from">From</label> <input type="text" id="from" name="from"/> <label for="to">to</label> <input type="text" id="to" name="to"/> 

Javascript:

var dateToday = new Date(); var dates = $("#from, #to").datepicker({ 
defaultDate: "+1w", 
changeMonth: true, 
numberOfMonths: 3, 
minDate: dateToday, 
onSelect: function(selectedDate) { 
    var option = this.id == "from" ? "minDate" : "maxDate", 
     instance = $(this).data("datepicker"), 
     date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, selectedDate, instance.settings); 
    dates.not(this).datepicker("option", option, date); 
} }); 

Вот это рабочая Demo

Смежные вопросы