date1=$1
date2=$2
如何检查是否$date1
是之前$date2
?
两个日期的格式均为DD/MM/YY
ie 01/01/15
。
答案1
如果你想厚颜无耻,你可以随时根据 UTC 纪元 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年之前的年份,请将两位数年份固定为四位数,否则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
某些系统上的默认 shell。
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