如何在bash下获得两个日期之间的差异

新手上路,请多包涵

就像问题听起来一样。我想从 20120203 中减去 20120115 并得到 19 作为答案。在 shell 脚本中实现这一点的最佳方法是什么?

原文由 owagh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 408
2 个回答
let DIFF=(`date +%s -d 20120203`-`date +%s -d 20120115`)/86400
echo $DIFF

原文由 Eugen Rieck 发布,翻译遵循 CC BY-SA 3.0 许可协议

提出使用 bc 的解决方案:

 current="$(date +%s.%N)" #current date, precise to nanoseconds
old="$(date +%s.%N -d "$(sh some_script_that_gives_a_date.sh)")" #convert output to ns too
diff=$(echo "$current-$old" |bc)

date +%s.%N -d $1 获取任意日期并将其转换为 给定格式 (如在本例中 +%s.%Nfloat 秒) 。意识到

-d 不是 POSIX 日期的一部分。 [但是]只要[您]不在像 Solaris 这样的发行版上工作([OP] 已将其标记为 linux 而不是 unix)[您]就应该很好。 :)

jaypal singh 对此答案 的评论)


要将其转换回人类可读的,您可以使用:

 date $2 -d @0$diff #Pad diff with leading zero

其中 $2 再次是日期格式,请参见 此处的示例

原文由 Cadoiz 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题