2013-02-25 13 views
10

Mam ciąg z pola wejściowego, którego używam do daty w formacie podobnym do tego 25-02-2013. Teraz chcę porównać ciąg z dzisiejszą datą. Chcę wiedzieć, czy ciąg jest starszy lub nowszy niż dzisiejsza data.Porównaj ciąg z dzisiejszą datą w javascript

Wszelkie sugestie?

+0

Myślę, że powinieneś użyć http://stackoverflow.com/a/8215648/1520671 –

Odpowiedz

0
<script type="text/javascript"> 

var q = new Date(); 
var m = q.getMonth()+1; 
var d = q.getDay(); 
var y = q.getYear(); 

var date = new Date(y,m,d); 

mydate=new Date('2011-04-11'); 
console.log(date); 
console.log(mydate) 

if(date>mydate) 
{ 
    alert("greater"); 
} 
else 
{ 
    alert("smaller") 
} 


</script> 
+8

@ Leon van der Veen - Ten kod ma błąd. Jeśli bieżącym miesiącem jest grudzień, wynik jest nieprawidłowy ... sprawdź to (aktualna data: 3/12/2012 i data wprowadzenia 23.12.2012). Proszę przetestuj przed wysłaniem odpowiedzi ... – 999k

+0

Myślę, że potrzebujesz aby upewnić się, że obie daty są w formacie iso RRRR-MM-DD, aby uniknąć błędu, można użyć doSOSOString() – Loopo

0

Jeśli input data jest w formacie "25-02-2013" można podzielić ciąg na DD MM YYYY i za pomocą split() metoda:

var date_string="25-02-2013"; 

var day = parseInt(date_string.split("-")[0]); 
var month= parseInt(date_string.split("-")[1]); 
var year = parseInt(date_string.split("-")[2]); 

parseInt() funkcja służy do utworzenia ciągu w liczbę całkowitą. Te 3 zmienne można następnie porównać z właściwościami obiektu Date().

3

Korzystanie z obiektu Javascript Date obiekt będzie łatwiejszy. Ale ponieważ obiekt Date nie obsługuje twojego formatu, wydaje mi się, że musisz przeanalizować wejściowy ciąg znaków (np. 25-02-2013) za pomocą "-", aby uzyskać datemonth i year, a następnie użyć obiektu Date do porównania.

var x ='23-5-2010'; 
var a = x.split('-'); 
var date = new Date (a[2], a[1] - 1,a[0]);//using a[1]-1 since Date object has month from 0-11 
var Today = new Date(); 
if (date > Today) 
    alert("great"); 
else 
    alert("less"); 
+0

Linia 3 powinna być "var date = new Date (a [0], a [1] - 1, a [2]) ; ' – k29

+0

@ k29 Nr Data Obiekt przyjmuje argumenty w porządku roku, miesiąca i dnia. Z ciągiem wejściowym OP a [2] to rok, więc moje oświadczenie jest poprawne. Proszę sprawdzić – 999k

+0

Niestety masz rację. Myślę, że skopiowałem jeden z ciągów z innych odpowiedzi podczas wypróbowywania kodu. – k29

12

Dokładna data comparsion i rozwiązane bug z przyjętą odpowiedzi

var q = new Date(); 
var m = q.getMonth(); 
var d = q.getDate(); 
var y = q.getFullYear(); 

var date = new Date(y,m,d); 

mydate=new Date('2011-04-11'); 
console.log(date); 
console.log(mydate) 

if(date>mydate) 
{ 
    alert("greater"); 
} 
else 
{ 
    alert("smaller") 
} 
4

Można użyć prostego operator porównania, aby zobaczyć, czy data jest większa niż innego:

var today = new Date(); 
var jun3 = new Date("2016-06-03 0:00:00"); 

if(today > jun3){ 
    // True if today is on or after June 3rd 2016 
}else{ 
    // Today is before June 3rd 
} 

Powodem, dla którego dodałem 0:00:00 do drugiej zmiennej, jest to, że bez niej będzie porównywać się z UTC (Greenwich), co może dawać niepożądane wyniki. Jeśli ustawisz czas na 0, będzie on porównywany z lokalną północą użytkownika.

0

Najistotniejsze punkty, które należy pamiętać robiąc porównanie dat

  • Oba terminy powinny być w tym samym formacie, aby uzyskać dokładny wynik.
  • Jeśli korzystasz z formatu daty i chcesz przeprowadzić tylko porównanie dat, upewnij się, że został przekonwertowany w odpowiednim formacie.

Oto kod, którego użyłem.

  var dateNotifStr = oRecord.getData("dateNotif"); 
      var today = new Date();  
      var todayDateFormatted = new Date(today.getFullYear(),today.getMonth(),today.getDate()); 

      var dateNotif=new Date(dateNotifStr); 
      var dateNotifFormatted = new Date(dateNotif.getFullYear(),dateNotif.getMonth(),dateNotif.getDate()); 

Cóż, można to zoptymalizować, ale powinno to dać ci jasny obraz tego, co jest wymagane do zrobienia dat w jednolitym formacie.

Powiązane problemy