如何在shell脚本(KSH shell)中找到存储在变量中的日期的差异b / w

时间:2013-04-26 05:27:29

标签: shell ksh hp-ux

在hp-ux中,因为没有可用的GNU date,即-d命令的-sdate选项不可用。如何找到两个给定日期之间的差异(如在Solaris或bash shell中那样)?

1 个答案:

答案 0 :(得分:0)

实际上有很多解决方案可以通过谷歌找到,但here是我偶然发现的一个解决方案,因为它简洁。您可以在两个日期使用其ansi_dn函数并计算差异。

diff_dates.sh

#!/bin/ksh

. ./ansi_dn.sh

date_to="$1"
date_from="$2"

echo $((
      $(ansi_dn \
        $(echo "${date_to}"   | cut -d/ -f3) \
        $(echo "${date_to}"   | cut -d/ -f2) \
        $(echo "${date_to}"   | cut -d/ -f1) \
      )
    - $(ansi_dn \
        $(echo "${date_from}" | cut -d/ -f3) \
        $(echo "${date_from}" | cut -d/ -f2) \
        $(echo "${date_from}" | cut -d/ -f1) \
      )
))

(如果两个日期的年,月和日都在单独的变量中,显然不需要cut噩梦。)

示例:

$ ./diff_dates.sh 08/05/2013 01/01/1939
27156

让我们用GNU date来验证正确性:

$ echo $(( ( $(date -d 2013-05-08 +%s) - $(date -d 1939-01-01 +%s) + 43200 ) / 86400))
27156