2014-02-09 8 views
0

Кажется, что это простой и часто задаваемый вопрос, но после того, как поисковая система Google в течение некоторого времени придумала ответ.javascript/jquery сравнить значения даты и времени

Очень просто, у меня есть две переменные, каждый со значением даты и времени в формате гггг-мм-дд чч: мм

Я хочу, чтобы сравнить, которые больше и выполнить логику соответственно:

пример: here

var fromDate = '2014-02-14 07:00'; 
var toDate = '2014-02-14 07:00'; 
if (Date.parse(fromDate) > Date.parse(toDate)) { 
    alert("Invalid Date Range!\nStart Date cannot be after End Date!") 
} else { 
    alert("VALID Date Range!\n Start Date is before End"); 
} 

Вышеприведенное постоянно возвращает успешную проверку.

Любые советы, предложения? Примеры? Спасибо,

+0

ваш код работает отлично. какой браузер вы используете? но суть обоих дат у вас в вашем вопросе, а не в вашем примере то же самое. –

+0

@MehranHatami: Если этот код работает в вашем браузере, это связано с тем, что ваш браузер превышает требования спецификации. Вы не можете полагаться на это кросс-браузер. –

+0

@ T.J.Crowder: вот почему я спросил о браузере. –

ответ

3

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

var fromDate = '2014-02-14 07:00'; 
var toDate = '2014-02-14 07:00'; 
if (fromDate > toDate) { 
    alert("Invalid Date Range!\nStart Date cannot be after End Date!"); 
} else { 
    alert("VALID Date Range!\n Start Date is before End"); 
} 

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

Но если вы действительно хотите значения даты/времени, этот строковый формат напрямую не поддерживается спецификацией. У вас есть три варианта:

  1. Используйте библиотеку, такую ​​как MomentJS.

  2. Массаж строки так, чтобы она находилась в поддерживаемом формате, но имейте в виду, что до ES5 там был нет стандартного формата, продиктованного спецификацией.

  3. Сделай сам

Последнее выглядит примерно так:

function parseMyDate(str) { 
    var parts = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2})/.exec(str); 
    if (!parts) { 
     return null; 
    } 
    return new Date(parseInt(parts[1], 10),  // Year 
        parseInt(parts[2], 10) - 1), // Month 
        parseInt(parts[3], 10),  // Day 
        parseInt(parts[4], 10),  // Hours 
        parseInt(parts[5], 10));  // Minutes 
} 

Затем использовать parseMyDate, где у вас есть Date.parse выше.

0

это реально некрасиво, но служит для ...

var fromDate = '2014-02-27 09:00'; 
    fromDate=fromDate.replace("-", "/"); 
    fromDate=fromDate.replace("-", "/"); 
    var toDate = '2014-02-27 10:00'; 
    toDate=toDate.replace("-", "/"); 
    toDate=toDate.replace("-", "/"); 


var fromDate=(new Date(fromDate).getTime()/1000); 
var toDate=(new Date(toDate).getTime()/1000); 

if(fromDate>toDate){ 
    alert('CORRECT'); 
} else { 
    alert('INCORRECT, from after to'); 
} 
Смежные вопросы