用于确定ISO 8601日期是否在X天之后的功能

时间:2017-05-21 08:54:14

标签: linux bash date datetime

我想要一个bash函数,它返回true或false,具体取决于传递的日期(ISO 8601格式)是否在X天之后。

ISO 8601日期格式的示例是 - 2017-05-19T01:57:41Z

该功能必须是纯粹的bash,最好是在OSX& Debian Linux。如果不可能,请说明原因。

谢谢

1 个答案:

答案 0 :(得分:0)

对于GNU coreutils日期可用的系统,您可以使用-d选项传递自定义日期,使用+%s修饰符获取时间戳:

#!/bin/bash

input=${1:-'2017-05-29T01:57:41Z'} 
input_ts=$(date -d "$input" +%s)

limit="now +${2:-5} days"
limit_ts=$(date -d "$limit" +%s)

if (( $input_ts > $limit_ts ))
then 
  echo "$input is after $limit"
else
  echo "$input is before $limit"
fi

一些测试:

$ ./script.sh
2017-05-29T01:57:41Z is after now +5 days

$ ./script.sh 2013/1/1
2013/1/1 is before now +5 days

$ ./script.sh '' 10
2017-05-29T01:57:41Z is before now +10 days

$ ./script.sh '2031/12/2' 10
2031/12/2 is after now +10 days