我想要一个bash函数,它返回true或false,具体取决于传递的日期(ISO 8601格式)是否在X天之后。
ISO 8601日期格式的示例是 - 2017-05-19T01:57:41Z
该功能必须是纯粹的bash,最好是在OSX& Debian Linux。如果不可能,请说明原因。
谢谢
答案 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