2016-09-30 5 views
1

wie Sie überprüfen können, ob der 30. oder 31. Tag eines Monats existiert oder nicht.Überprüfen Sie, ob das Datum existiert (30./31. Tag)

31.09.2016 existiert nicht, wird aber in Java und Javascript als 01.10.2016 angezeigt. Sogar mit den richtigen Locales etc. Jede Lösung in Javascript oder Java ist willkommen, da eine Ajax-Anfrage das ebenfalls lösen kann.

Vielen Dank im Voraus

+1

Ändern Sie die Zeichenfolge in ein Datum, und zurück in einen String. Wenn die Strings gleich sind, ist es ein gültiges Datum; Sonst ist es nicht. –

+0

Ich dachte, dass es eine einfachere Lösung geben könnte. Das war mein erster Gedanke. Vielen Dank. – Moonstar

+0

@AndyTurner also existiert das Datum 31.12.2016 dann nicht? Weil es in den Staaten nicht wäre. Natürlich ist das offensichtlich, also könnte es korrekt erkannt werden - versuchen Sie es mit 05/06/2016. – vlaz

Antwort

5

Ich glaube, Sie die momentjs Bibliothek für jede Art von Datum Manipulation in Javascript verwenden sollten: MomentJS

var date = moment('31.09.2016','DD.MM.YYYY'); 
console.log(date.isValid()); // This will print false in case of an invalid date 

Edit: einen Plunker Erstellt so dass Sie es ausprobieren können: plunker example . Überprüfen Sie die JavaScript-Konsole

+0

Perfekt. Funktioniert wie es sollte. Vielen Dank. Die Validierung erfolgt über die Eingabemaske, war aber nicht in der Lage, diesen speziellen Fall zu überprüfen. – Moonstar

3

Die Antwort von @nagyf ist ziemlich gut für js, auf der Java-Seite sollten Sie setzen die leninent Eigenschaft auf false im DateFormat und dann erhalten Sie eine ParseException erhalten, wenn das Datum ungültig ist.

Beispiel:

final String d = "31/09/2016"; 
final DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); 
df.setLenient(false); 
final Date parsDate = df.parse(d); 
System.out.println(d); 
+0

Wusste darüber nicht. Vielen Dank. – Moonstar

+0

:) Sie sind willkommen !!!! –

1

Hier Lösung für Java ist

try{ 
    String date = "31/9/2016"; 
    Data d = new Date(); 
    DateFormat df = new SimpleDateFormat("đd/MM/yyyy"); 
    df.setLenient(false); 
    d = df.parse(date); 
catch(ParseException ex){ 
    System.out.println("Invalid Date"); 
} 
+1

Fangen Sie nicht 'Exception': Fangen Sie die spezifischste Ausnahme, die Sie können (d. H.' ParseException'), so dass Sie nicht zusammenhängende Probleme zusammenführen. –

+0

@AndyTurner Mit Ihnen einverstanden. Ich habe diese Ausnahme vergessen, danke für die Erinnerung :) –

0

Ein alternativer Weg vs lastday gegeben zu überprüfen, was tatsächlich auf dem Kalender ist wäre, wenn Sie mit einem gültigen Datum arbeiten und einem gegeben lastday: (nicht in JavaScript in groovy/java)

int day=31 
Date givenDate = new Date() 
Calendar cal = Calendar.instance 
cal.setTime(givenDate) 
int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH) 
if (day > lastDay) { 
// fail throw exception 
} 
//otherwise good to go 
0

java.time

Die Klasse YearMonth ist dafür praktisch. Dieses Objekt kann ein LocalDate Objekt bereitstellen, das den letzten Tag des Monats darstellt. Sie können dieses Objekt nach seiner Nummer für den Tag des Monats fragen.

int numberOfLastDay = 
    YearMonth.of(2016 , Month.SEPTEMBER) 
     .atEndOfMonth() 
     .getDayOfMonth() ; 
Verwandte Themen