2013-04-18 12 views
41

Potrzebuję jednej rzeczy, Potrzebuję sprawdzić, czy jedna data, czyli ciąg w fomat dd/mm/rrrr jest zawarty między dwiema datami, z tym samym formatem (dd/mm/rrrr)Sprawdź, czy jedna data jest pomiędzy dwoma datami (javascript)

próbowałem to, ale nie działa:

var dateFrom = "02/05/2013"; 
var dateTo = "02/09/2013"; 
var dateCheck = "02/07/2013"; 

var from = Date.parse(dateFrom); 
var to = Date.parse(dateTo); 
var check = Date.parse(dateCheck); 

if((check <= to && check >= from))  alert("date contained"); 

użyłem debugger i sprawdzić, do i od zmiennych mają wartość isNaN mógłbyś mi pomóc?

Odpowiedz

59

Date.parse obsługuje format dd/mm/rrrr nie dd/mm/rrrr. Do tego też trzeba korzystać z biblioteki jak moment.js lub coś zrobić, jak podano poniżej

var dateFrom = "02/05/2013"; 
var dateTo = "02/09/2013"; 
var dateCheck = "02/07/2013"; 

var d1 = dateFrom.split("/"); 
var d2 = dateTo.split("/"); 
var c = dateCheck.split("/"); 

var from = new Date(d1[2], parseInt(d1[1])-1, d1[0]); // -1 because months are from 0 to 11 
var to = new Date(d2[2], parseInt(d2[1])-1, d2[0]); 
var check = new Date(c[2], parseInt(c[1])-1, c[0]); 

console.log(check > from && check < to) 
+1

+1 za poprawne przeanalizowanie ciągu daty i pozostawienie go w parserze zależnym od implementacji. – RobG

+0

Rozważ konwencje db, pierwsza data powinna być włącznie. na przykład 'check> = od && sprawdź

+0

@Diode sprawdź: 02/23/2018 od: 20.11.2018 do: 31.12.2018 zwraca true. – chudasamachirag

20

Zamiast porównywać bezpośrednio daty, porównaj wartość getTime() daty. Funkcja getTime() zwraca liczbę milisekund od 1 stycznia 1970 jako liczbę całkowitą - powinna być trywialna, aby określić, czy jedna liczba całkowita przypada między dwiema innymi liczbami całkowitymi.

Coś

if((check.getTime() <= to.getTime() && check.getTime() >= from.getTime()))  alert("date contained"); 
+0

'NaN' nie ma' 'GetTime' ani metody getTime'? – Bergi

+0

Uwielbiam to, takie proste, dzięki –

8

Spróbuj jak poniżej, będzie cię hep ...

Fiddle:http://jsfiddle.net/RYh7U/146/

Scenariusz:

if(dateCheck("02/05/2013","02/09/2013","02/07/2013")) 
    alert("Availed"); 
else 
    alert("Not Availed"); 

function dateCheck(from,to,check) { 

    var fDate,lDate,cDate; 
    fDate = Date.parse(from); 
    lDate = Date.parse(to); 
    cDate = Date.parse(check); 

    if((cDate <= lDate && cDate >= fDate)) { 
     return true; 
    } 
    return false; 
} 
+0

WTH jest różnica? – Bergi

+0

@Bergi: Jeśli Datą jest 'NAN', to funkcja' return False' Tak więc '' Data check lub pass' to 'Not Availed' lub' In Valid' i to jest różnica HELL pomiędzy kodem a mną – Pandian

+0

Ale czy warunek zgodności z OP to również robi? I pytanie dotyczyło przede wszystkim daty * bycia * 'NaN' (co nie jest we wszystkich przeglądarkach). – Bergi

-1

Spróbuj

var gdate='01-05-2014'; 
     date =Date.parse(gdate.split('-')[1]+'-'+gdate.split('-')[0]+'-'+gdate.split('-')[2]); 
     if(parseInt(date) < parseInt(Date.now())) 
     { 
      alert('small'); 
     }else{ 
      alert('big'); 
     } 

Fiddle

4

Odpowiedź, która ma 50 głosów nie sprawdza na bieżąco w kontroli tylko przez kilka miesięcy. Ta odpowiedź nie jest poprawna. Poniższy kod działa.

var dateFrom = "01/08/2017"; 
var dateTo = "01/10/2017"; 
var dateCheck = "05/09/2017"; 

var d1 = dateFrom.split("/"); 
var d2 = dateTo.split("/"); 
var c = dateCheck.split("/"); 

var from = new Date(d1); // -1 because months are from 0 to 11 
var to = new Date(d2); 
var check = new Date(c); 

alert(check > from && check < to); 

Jest to kod pisał w innej odpowiedzi i zmieniłem daty i tak zauważyłem, że nie działa

var dateFrom = "02/05/2013"; 
var dateTo = "02/09/2013"; 
var dateCheck = "07/07/2013"; 

var d1 = dateFrom.split("/"); 
var d2 = dateTo.split("/"); 
var c = dateCheck.split("/"); 

var from = new Date(d1[2], parseInt(d1[1])-1, d1[0]); // -1 because months are from 0 to 11 
var to = new Date(d2[2], parseInt(d2[1])-1, d2[0]); 
var check = new Date(c[2], parseInt(c[1])-1, c[0]); 


alert(check > from && check < to); 
0

Spróbuj tego:

HTML

<div id="eventCheck"></div> 

JAVASCRIPT

// ----------------------------------------------------// 
// Todays date 
var today = new Date(); 
var dd = today.getDate(); 
var mm = today.getMonth()+1; //January is 0! 
var yyyy = today.getFullYear(); 

// Add Zero if it number is between 0-9 
if(dd<10) { 
    dd = '0'+dd; 
} 
if(mm<10) { 
    mm = '0'+mm; 
} 

var today = yyyy + '' + mm + '' + dd ; 


// ----------------------------------------------------// 
// Day of event 
var endDay = 15; // day 15 
var endMonth = 01; // month 01 (January) 
var endYear = 2017; // year 2017 

// Add Zero if it number is between 0-9 
if(endDay<10) { 
    endDay = '0'+endDay; 
} 
if(endMonth<10) { 
    endMonth = '0'+endMonth; 
} 

// eventDay - date of the event 
var eventDay = endYear + '/' + endMonth + '/' + endDay; 
// ----------------------------------------------------// 



// ----------------------------------------------------// 
// check if eventDay has been or not 
if (eventDay < today) { 
    document.getElementById('eventCheck').innerHTML += 'Date has passed (event is over)'; // true 
} else { 
    document.getElementById('eventCheck').innerHTML += 'Date has not passed (upcoming event)'; // false 
} 

Fiddle: https://jsfiddle.net/zm75cq2a/

Powiązane problemy