测试变量是否是具有正确格式的日期

时间:2014-11-12 10:11:52

标签: bash date

我想测试变量是否是日期(不是问题),但是如果变量具有正确的日期格式(yyyy-MM-dd)。

我试过了:

export DATE_REFRESH=01/01/1900

if ! date -d $DATE_REFRESH "+%Y-%m-%d"; then
    echo "$DATE_REFRESH is not a valid date. Expected format is : yyyy-MM-dd"
fi

但它不起作用。

我可以试试这个:

if [[ $DATE_REFRESH == [0-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9] ]]

但我不想约会到33/19/2000 ......

2 个答案:

答案 0 :(得分:4)

您可以使用此代码段:

isValidDate() {
   if [[ "$1" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]] && date -d "$1">/dev/null 2>&1; then
      echo "valid"
   else
      echo "invalid"
   fi;
}

<强>测试

isValidDate "1900-12-25"
valid

isValidDate "1900-14-25"
invalid

isValidDate "01/01/1900"
invalid

答案 1 :(得分:2)

您必须同时执行这两项测试,因为date字符串可以是所有内容,请参阅联机帮助页:

  

--date = STRING是一个大多数免费格式的人类可读日期   字符串,如......

使用:

if ! [[ "$DATE_REFRESH" =~ ^[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}$ ]] \
|| ! date -d $DATE_REFRESH >/dev/null 2>&1; then
  echo "$DATE_REFRESH is not a valid date. Expected format is : yyyy-MM-dd"
fi