将变量内的日期时间与当前日期时间进行比较

时间:2018-03-07 06:06:59

标签: bash jq

我有以下一行:

 for custom_field in $(jq -r '.issues[] | .fields.created' 1.json
); do
      echo $custom_field

done

输出:

2018-03-06T21:24:41.000+0000
2018-03-06T22:48:47.000+0000

如何将当前日期时间与每个输出进行比较,以及是否超过3小时打印"旧"?

2 个答案:

答案 0 :(得分:1)

首先转换并减去三个小时要容易得多。

下面的示例转换为秒,如果满足条件,则打印为true。

date_in_seconds=$(date -d $custom_field +"%s"); [ ${date_in_seconds} -gt 259200 ] && echo true;

对于date命令的非GNU版本,您可以使用以下内容;

date_in_seconds=$(date -j -f '%Y-%m-%d %H:%M:%S' "2016-02-22 20:22:14" '+%s')

请注意,EPOCH将于2036年1月1日展开。

答案 1 :(得分:1)

给出像

这样的输入
{ "issues":
 [{"id": 1, "fields": {"created": "2018-03-06T21:24:41.000+0000"}},
  {"id": 2, "fields": {"created": "2018-03-06T22:48:47.000+0000"}},
  {"id": 3, "fields": {"created": "2018-03-09T22:48:47.000+0000"}}]}

您可以使用内置日期操作功能打印旧记录,例如

jq -r '(now-3600*3) as $when | .issues[] |
  select(.fields.created | strptime("%Y-%m-%dT%H:%M:%S.000+0000") | mktime < $when) |
[.id, .fields.created, "old"]' 1.json

最后一行可能需要调整以准确生成您想要的输出。