date1=$1
date2=$2
$date1
以前であるかどうかを確認するには$date2
?
両方の日付の形式はDD/MM/YY
すべてです01/01/15
。
答え1
恥ずかしく言いたい場合は、いつでもUTC epoch 1970-01-01 00:00:00に基づいて日付を変換できます。
#added to fix DD/MM/YY format
input1=`echo $1 | awk -F "/" '{print $2"/"$1"/"$3}'`
input2=`echo $2 | awk -F "/" '{print $2"/"$1"/"$3}'`
date1=`date +%s --date="$input1"`
date2=`date +%s --date="$input2"`
if [[ "$date1" -lt "$date2" ]]; then
echo "$1 earlier than $2"
else
echo "$1 not earlier than $2"
fi
答え2
並べ替える必要があるので、フィールドに分割して始めてください。 YYMMDDまたはYYYYMMDDは文字列全体を一度に表示するため、この種の比較操作にはるかに優れています。
IFS="/" date1a=($date1) date2a=($date2)
その後、1999年以前の年を処理する必要がある場合は、2桁の年を4桁に変更します。そうでなければ、99は01より大きい。
((date1a[2] += (date1a[2] < 70 ? 2000 : 1900)))
((date2a[2] += (date2a[2] < 70 ? 2000 : 1900)))
その後、YYYYMMDDの順序で再クリーンアップします。
date1b="${date1a[2]}${date1a[1]}${date1a[0]}"
date2b="${date2a[2]}${date2a[1]}${date2a[0]}"
これで比較できます。
if (( $date1b < $date2b )); then
echo "earlier"
else
echo "later"
fi
注:これはbash固有の答えであり、POSIXで指定されていないbash(およびksh)固有の機能によって異なり、一部の/bin/sh
システムではデフォルトのシェルでは機能しない場合があります。
POSIXには別のアプローチが必要です。awk
重い作業を安全に行うことができます。
awkscr='BEGIN {FS="/"}; {print $3+($3<70?2000:1900) $2 $1}'
date1b=$(echo "$date1" | awk "$awkscr")
date2b=$(echo "$date2" | awk "$awkscr")
if [ "$date1b" -lt "$date2b" ]; then
echo "earlier"
else
echo "later"
fi