入力日付値 MM-DD-YYYY から日、月、および年の値を抽出し、代わりに明確な (ISO) 形式 YYYY-MM-DD として検証できます (DD-MM-YYY 形式の日付を次のように検証できます)。 25-12-2010 などの日付を使用して「正しい」が、有効な MM-DD-YYY 日付ではないため、最初に日付形式を変更する必要があります)
正しい形式の有効な日付で問題ありません
2005 年 11 月 30 日が有効です:
$ 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
正しい形式の無効な日付は OK ではありません
2005 年 11 月 31 日は有効ではありません:
$ 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
間違った形式の有効な日付は OK ではありません
DD-MM-YYYY 形式の 1979 年 4 月 20 日は、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
別の簡単な方法:BASH 変数文字列を使用して、ハイフンをスラッシュに置き換えます
$ 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
date -d "datestring"
で確認できます
だから date -d "12/31/2012"
は有効ですが、ハイフンを使用します。 date -d "12-31-2012"
、date
には無効です .
次の単語も使用できます:date -d 'yesterday'
または date -d '1 week ago'
両方とも有効です。