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

owa*_*agh 17 linux bash date

正如问题听起来一样.我想从20120203减去说20120115并得到19作为答案.在shell脚本中实现此功能的最佳方法是什么?

Eug*_*eck 30

let DIFF=(`date +%s -d 20120203`-`date +%s -d 20120115`)/86400
echo $DIFF
Run Code Online (Sandbox Code Playgroud)

  • @EugenRieck 这是一个很好的解决方案,但不可移植,因为 `-d` 不是 POSIX 日期的一部分。因此,只要 OP 不在像 Solaris 这样的发行版上工作(因为他将其标记为 linux 而不是 unix),他应该会很好。:) (2认同)

Cad*_*oiz 6

提出这个解决方案使用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)
Run Code Online (Sandbox Code Playgroud)

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

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

(贾帕尔·辛格对此答案的评论)


要将其转换回人类可读的格式,您可以使用:
date $2 -d @0$diff #Pad diff with leading zero
Run Code Online (Sandbox Code Playgroud)

$2日期格式又在哪里,请参见此处的示例