Linux 用于确定ISO 8601日期是否在X天之后的函数

Linux 用于确定ISO 8601日期是否在X天之后的函数,linux,bash,date,datetime,Linux,Bash,Date,Datetime,我想要一个bash函数,它根据传递的日期(ISO8601格式)是否在X天后返回true或false ISO 8601日期格式的一个示例是-2017-05-19T01:57:41Z 该函数必须是纯bash函数,最好在OSX和debianlinux上工作。如果不可能,请说明原因 谢谢对于GNU coreutils日期可用的系统,您可以使用-d选项传递自定义日期,并使用+%s修饰符获取时间戳: #!/bin/bash input=${1:-'2017-05-29T01:57:41Z'} input

我想要一个bash函数,它根据传递的日期(ISO8601格式)是否在X天后返回true或false

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

该函数必须是纯bash函数,最好在OSX和debianlinux上工作。如果不可能,请说明原因


谢谢

对于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

请显示您的编码工作,因此不是代码编写服务。