Sie können die Tages-, Monats- und Jahreswerte aus dem Eingabedatumswert MM-TT-JJJJ extrahieren und stattdessen im eindeutigen (ISO-) Format JJJJ-MM-TT validieren (Sie können ein Datum im Format TT-MM-JJJ als validieren "korrekt" mit Datum, z. B. 25-12-2010, aber es ist kein gültiges MM-TT-JJJ-Datum, daher muss zuerst das Datumsformat geändert werden)
Ein gültiges Datum im richtigen Format ist OK
30. November 2005 gültig:
$ DATE=11-30-2005; d=${DATE:3:2}; m=${DATE:0:2}; Y=${DATE:6:4}; echo "year=$Y, month=$m, day=$d"; if date -d "$Y-$m-$d" &> /dev/null; then echo VALID; else echo INVALID; fi
year=2005, month=11, day=30
VALID
$ DATE=11-30-2005; if date -d "${DATE:6:4}-${DATE:0:2}-${DATE:3:2}" &> /dev/null; then echo VALID; else echo INVALID; fi
VALID
Ein ungültiges Datum im richtigen Format ist NICHT OK
31. November 2005 bestätigt nicht:
$ DATE=11-31-2005; d=${DATE:3:2}; m=${DATE:0:2}; Y=${DATE:6:4}; echo "year=$Y, month=$m, day=$d"; if date -d "$Y-$m-$d" &> /dev/null; then echo VALID; else echo INVALID; fi
year=2005, month=11, day=31
INVALID
$ DATE=11-31-2005; if date -d "${DATE:6:4}-${DATE:0:2}-${DATE:3:2}" &> /dev/null; then echo VALID; else echo INVALID; fi
INVALID
Ein gültiges Datum im falschen Format ist NICHT OK
Der 20. April 1979 im Format TT-MM-JJJJ gilt nicht als MM-TT-JJJJ-Datum:
$ DATE=20-04-1979; d=${DATE:3:2}; m=${DATE:0:2}; Y=${DATE:6:4}; echo "year=$Y, month=$m, day=$d"; if date -d "$Y-$m-$d" &> /dev/null; then echo VALID; else echo INVALID; fi
year=1979, month=20, day=04
INVALID
$ DATE=20-04-1979; if date -d "${DATE:6:4}-${DATE:0:2}-${DATE:3:2}" &> /dev/null; then echo VALID; else echo INVALID; fi
INVALID
Alternative, einfachere Methode:BASH-Variablenzeichenfolge verwenden, Bindestriche durch Schrägstriche ersetzen
$ DATE="04-30-2005"; [[ $(date -d "${DATE//-/\/}" 2> /dev/null) ]] && echo VALID || echo INVALID
VALID
$ DATE="04-31-2005"; [[ $(date -d "${DATE//-/\/}" 2> /dev/null) ]] && echo VALID || echo INVALID
INVALID
Sie können mit date -d "datestring"
nachsehen
Also date -d "12/31/2012"
ist gültig, aber die Verwendung von Bindestrichen, z. date -d "12-31-2012"
, gilt nicht für date
.
Sie können auch Wörter verwenden:date -d 'yesterday'
oder date -d '1 week ago'
sind beide gültig.