2012-03-08 5 views
5

Jak mogę porównać dane wejściowe daty w formacie "MM/DD/RRRR" z funkcją Date() w JavaScript?Jak mogę porównać datę "MM/DD/RRRR" z funkcją Date() w JavaScript?

Na przykład:

if (InputDate < TodaysDate){ 
    alert("You entered past date") 
} 
else if (InputDate > TodaysDate){ 
    alert("You entered future date") 
} 
else if (InputDate = TodaysDate){ 
    alert("You entered present date") 
} 
else{ 
    alert("please enter a date") 
} 

Odpowiedz

2

Dzięki wszystkim! Nie znalazłem żadnego z powyższych do działania, ale udało mi się to w końcu osiągnąć. Musiałem trochę zhakować;)

Zrobiłem to poprzez podzielenie daty za pomocą getMonth, getDate i getYear i analizowanie, a następnie porównywanie. Działa tak, jak chcę:

Date.parse(document.getElementById("DateId").value) < Date.parse(dateToday.getMonth() + "/" + dateToday.getDate() + "/" + dateToday.getYear()) 
1

Spójrz na Date object docs.

Potrzebujesz jednego obiektu Date z wprowadzoną datą (używając konstruktora lub metod setMonth itd.) I jednego z bieżącą datą (bez argumentów do konstruktora). Następnie można użyć getTime, aby uzyskać znaczniki czasu UNIX na obu obiektach i porównać je.

0

Spójrz na http://www.datejs.com/. Pomoże Ci w standardowej manipulowaniu datą

+0

Datejs jest przesadą do prostego porównywania dat, szczególnie gdy data jest w znanym formacie. Po prostu nie warto dodawać * innej * biblioteki. Uderzyło mnie, że jest to raczej zabawna aplikacja - na początku imponująca, ale kiedy wypróbowuję rzeczywiste reprezentacje dat w języku naturalnym, nie jest wystarczająco solidna. Np. "Dziesiąta", "6 wieczorem", "dwa dni od dzisiaj". Nie był aktualizowany od 2007 roku, więc nie ma zbyt wiele nadziei na to, aby dodawać tę solidność. – gilly3

+0

Cóż, rozumiem, co masz na myśli, ale robienie rzeczy z dat w JavaScript może zająć dużo czasu, jeśli chcesz zrobić to dobrze. Uważam, że korzystanie z zewnętrznej biblioteki warte jest dodatkowych kosztów, ale zgadzam się, że musi ona być utrzymana i stabilna. Osobiście nie wykonałem wiele pracy z datejami, więc mogę tylko założyć, że masz rację. Samodzielne budowanie tego typu rzeczy jest kontrowersyjne, a cały nowy kod zawiera błędy, więc zawsze próbuję ponownie wykorzystać istniejące i przetestowane rzeczy. – koenpeters

3

Konwertuj ciąg znaków na datę za pomocą new Date(dateString). Następnie znormalizuj dzisiejszą datę, aby pominąć informacje o czasie, używając today.setHours(0, 0, 0, 0). Następnie można po prostu porównać daty, jak masz powyżej:

var date = new Date(dateInput); 
if (isNaN(date)) { 
    alert("please enter a date"); 
} 
else { 
    var today = new Date(); 
    today.setHours(0, 0, 0, 0); 
    date.setHours(0, 0, 0, 0); 
    var dateTense = "present"; 
    if (date < today) { 
     dateTense = "past"; 
    } 
    else if (date > today) { 
     dateTense = "future"; 
    } 
    alert("You entered a " + dateTense + " date"); 
} 

Demo:http://jsfiddle.net/w2sJd/

+0

To zadziałało dla mnie. –

-3
function compareDate(inputDateString) { 
    var inputDate, now; 
    inputDate = new Date(inputDateString); 
    now = new Date(); 
    if (inputDate < now) { 
    console.log("You entered past date"); 
    } 
    else if (inputDate > now) { 
    console.log("You entered future date"); 
    } 
    else if (inputDate === now) { 
    console.log("You entered present date"); 
    } 
    else { 
    console.log("please enter a date"); 
    } 
} 
+3

To nie zadziała na dzisiejszą datę z dwóch powodów. Najpierw porównujesz przez odniesienie zamiast przez wartość. 'inputDate' nie odwołuje się do tego samego obiektu Date, co' teraz', chociaż ich wartości mogą być równe. Po drugie, data utworzona przez parsowanie 'MM/dd/rrrr' będzie miała godziny, minuty, sekundy i ms wszystkie równe' 0', podczas gdy 'nowa data()' będzie zawierała informację o czasie (z wyjątkiem 1 ms na dzień) . – gilly3

Powiązane problemy