日期差异计算

ser*_*com 4 scripting bash shell-script

我想计算下面两者之间的时差

Value1=2016-10-13 14:19:23
Value2=2016-10-13 18:19:23 
Run Code Online (Sandbox Code Playgroud)

我想以小时/分钟的形式获得差异。任何可用的快速解决方案?

hee*_*ayl 10

您可以使用date(假设 GNU 实现)与命令替换,并使用算术扩展来获得时间之间的差异:

% Value1='2016-10-13 14:19:23'

% Value2='2016-10-13 18:19:23' 

% echo "$(($(date -d "$Value2" '+%s') - $(date -d "$Value1" '+%s')))"
14400
Run Code Online (Sandbox Code Playgroud)

结果以秒为单位。


Ste*_*ige 6

答案以小时/分钟/秒为单位:

date -u -d @$(($(date -d "$Value2" '+%s') - $(date -d "$Value1" '+%s'))) '+%T'
Run Code Online (Sandbox Code Playgroud)

只需几小时/分钟即可得到答案(按照最初的要求):

date -u -d @$(($(date -d "$Value2" '+%s') - $(date -d "$Value1" '+%s'))) '+%H:%M'
Run Code Online (Sandbox Code Playgroud)

上面假设用户只对小时和分钟的差异感兴趣,而忽略了日期的差异。答案完全取决于想要什么。

处理大于或等于一天的差异:

Value1='2016-10-13 14:19:23'
Value2='2016-10-18 10:34:58'

D1=$(date -d "$Value1" '+%s'); D2=$(date -d "$Value2" '+%s')
echo "$(((D2-D1)/86400)):$(date -u -d@$((D2-D1)) +%H:%M)"
Run Code Online (Sandbox Code Playgroud)

产量:

4:20:15
Run Code Online (Sandbox Code Playgroud)

对于各种 shell,我们还可以在 Bash 中执行诸如以下操作:

declare -i Delta=D2-D1
declare -i Days=Delta/86400
echo "$Days:$(date -u -d@$Delta +%H:%M)"
Run Code Online (Sandbox Code Playgroud)