2014-02-20 3 views
0

я StartDate и EndDate строки и им преобразования строки в дату объектаJavascript, как сравнить даты и времени

var startdate = start_date[3]+'-'+month_value_start+'-'+start_date[2]+' '+start_time[0]+':'+start_time[1]+':00'; 
var enddate = end_date[3]+'-'+month_value_end+'-'+end_date[2]+' '+end_time[0]+':'+end_time[1]+':00'; 

var s_date = new Date(startdate); 
var e_date = new Date(enddate); 

StartDate и EndDate формат похож 2014-02-20 00:00:00

я хочу сравнить этот объект даты, если s_date больше e_date всплывающего окна будет показан пользователем

if(s_date > e_date) 
{ 
alert('Start Date Cannot Be Greater Than End Date'); 
} 

, но некоторые, как если условие не выполняется, даже если startdatetime больше enddatetime.

как решить эту проблему любые предложения?

решаемых

программы, которую я использую, автоматически изменяет EndDate во время выполнения, если StartDate больше даты окончания. но никакого обновления на frontend, т.е. текстового поля datetimepicker, так что frontend enddate остается меньше, чем startdate, но в фоновом коде изменил переменную enddate и эту переменную, которую я использовал для сравнения дат .... извините за беспокойство у ребят .... и спасибо за помогая мне.

+0

Если предупреждение не отображается, это означает, что 's_date' ** не ** больше, чем' e_date'. Убедитесь, что объекты даты созданы правильно. –

+0

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

+0

Да, но '>' - такая простая операция, что ** только ** причина, по которой условие было бы ложным что объекты даты не те, которые вы намереваетесь иметь, а 's_date' на самом деле не больше, чем' e_date'. Откуда вы знаете, что 's_date' действительно больше? Вы делали 'console.log (s_date.toString(), e_date.toString())'? Если вы не предоставили ** ** пример, где 's_date' позже, чем' e_date' и 's_date> e_date' является' false', я буду придерживаться своего мнения. –

ответ

3

Все ответы правильны при определении разницы.

Но проблема вы столкнулись является неправильным способом вызова

new Date(dateString); 

скопирован ответа здесь Difference between Date(dateString) and new Date(dateString)

Даты()

При этом вызове функция называется Дата(). Он принимает дату в формате «гггг-мм-дд чч: мм: сс»

новый Дата()

С этим вы создаете новый экземпляр Date.

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

new Date() // current date and time 
new Date(milliseconds) //milliseconds since 1970/01/01 
new Date(dateString) 
new Date(year, month, day, hours, minutes, seconds, milliseconds) 

Таким образом, использование 2010-08-17 12:09:36 в качестве параметра конструктору не допускается.

EDIT: новая Дата (DateString) использует один из следующих форматов:

"October 13, 1975 11:13:00" 
"October 13, 1975 11:13" 
"October 13, 1975" 
+0

Это правильный ответ. FWIW, 'dateString' также может быть в формате' YYY-MM-DDTHH: mm: ss' –

+0

Спасибо @FelixKling за улучшение ответа. Мне очень плохо при форматировании ответа. Это выглядит более читаемым таким образом :) – VJS

+0

объект даты преобразует строку, как Thu 13 февраля 2014 00:00:00 GMT + 0530 (стандартное время Индии), и все еще нет всплывающего окна –

-1
edate = Date.parse(e_date); 
    sdate = Date.parse(s_date); 

    if((edate-sdate)<0) 
    { 

     alert("End date should be greater then start date."); 
     return; 

    } 

Date.parse («Дата») -> эта функция анализирует строку даты и возвращает количество миллисекунд между датой строки и в полночь 1 января 1970 года

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

+0

У вас также есть ** пояснение **? Код сам по себе не очень полезен Мне особенно интересно, почему вы используете '(edate-sdate) <0', а не намного проще выражение' sdate> edate'. –

+0

не работает .... (edate-sdate) NaN –

+1

Я думаю, что есть проблема, в то время как ур конвертирует строку на сегодняшний день ... посмотреть здесь для преобразования строки на сегодняшний день http://stackoverflow.com/questions/5619202/converting-string-to-date-in -js –

0

Вы можете использовать метод getTime() объекта Date. Этот метод возвращает число миллисекунд с 1970/01/01. Таким образом, сравнение становится следующим:

if(s_date.getTime() > e_date.getTime()) 
{ 
    alert('Start Date Cannot Be Greater Than End Date'); 
} 
+0

'getTime' возвращает то же значение, что и' valueOf', которое вызывается автоматически при использовании '' 'оператора. Так что если он не работает корректно * без * 'getTime', он не будет работать с ним. http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.5.8 –

+0

не работает .... нет всплывающего окна –

+0

Не работает, потому что вы не показываете, что ваш start_date [] и end_date [] есть и есть теперь способ для меня или кого-либо знать. Поэтому, когда вы вызываете конструктор функции Date, то, что вы передали, может быть недействительным. Попробуйте эту скрипку http://jsfiddle.net/pcq6y/. Устраните проблему, разбив проблему на более мелкие детали. –

1

Следующий фрагмент кода демонстрирует, как сравнение данных выполняется с использованием JavaScript.

var startDate= new Date(); 
startDate.setFullYear(2020, 1, 20); 
var today= new Date(); 

if (startDate> today) { 
    alert("Today is before 20th Feb 2020"); 
} else { 
    alert("Today is after 20th Feb 2020"); 
} 
+0

bt нет времени с датой? что, если даты одинакового времени? –

+0

Вы можете использовать: var date1 = new Дата (2013, 2, 20, 7,0,0) var date2 = new Дата (2013, 2, 20, 7,0,1) if (date2> date1) {} –

+0

Вы можете обратиться сюда: http://www.w3schools.com/jsref/jsref_obj_date.asp –

0

Попробуйте это:

var sd = new Date('12, 12, 2012'); 
var ed = new Date('12, 12, 2014'); 

//This condition means the end date is bigger even if the comparison says otherwise 
//Can work without Parse 
if(Date.parse(sd) > Date.parse(ed)){ 
    console.log('Start date is bigger'); 
} else { 
    console.log('End date is bigger'); 
} 

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

+0

Почему вы передаете объект 'Date' в' Date.parse'? Цель 'Date.parse' заключается в преобразовании ** строк ** в объекты даты. –

+0

Спасибо за исправление, но я получил его для работы с использованием синтаксического анализа для преобразования в миллисекунды. –

+0

О, вы правы, 'Date.parse' действительно возвращает миллисекунды. Однако, когда вы сравниваете объекты даты с '>', они автоматически преобразуются в миллисекунды. Просто попробуйте 'sd> ed' и убедитесь сами. 'Date.parse' здесь лишний и довольно запутанный, чем помогающий. –

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