Anda dapat mengekstrak nilai hari, bulan, dan tahun dari nilai tanggal masukan MM-DD-YYYY dan memvalidasinya sebagai format YYYY-MM-DD yang tidak ambigu (Anda dapat memvalidasi tanggal berformat DD-MM-YYY sebagai "benar" menggunakan tanggal, misalnya 25-12-2010, tetapi ini bukan tanggal MM-DD-YYY yang valid, oleh karena itu perlu mengubah format tanggal terlebih dahulu)
Tanggal yang valid dalam format yang benar tidak apa-apa
30 November 2005 berlaku:
$ 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
Tanggal yang tidak valid dalam format yang benar TIDAK BOLEH
31 November 2005 tidak memvalidasi:
$ 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
Tanggal yang valid dalam format yang salah TIDAK BOLEH
20 April 1979 dalam format DD-MM-YYYY tidak divalidasi sebagai tanggal MM-DD-YYYY:
$ 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
Metode alternatif yang lebih sederhana:gunakan string variabel BASH, ganti tanda hubung menjadi garis miring
$ 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
Anda dapat memeriksa dengan date -d "datestring"
Jadi date -d "12/31/2012"
valid, tetapi menggunakan tanda hubung, mis. date -d "12-31-2012"
, tidak valid untuk date
.
Anda juga dapat menggunakan kata-kata:date -d 'yesterday'
atau date -d '1 week ago'
keduanya valid.