如何在shell脚本(KSH shell)中查找与存储在变量中的日期之间的差异

如何在shell脚本(KSH shell)中查找与存储在变量中的日期之间的差异,shell,ksh,hp-ux,Shell,Ksh,Hp Ux,在hp ux中,由于没有可用的GNUdate,即date命令的-d和-s选项不可用。我如何找出两个给定日期在几天内的差异(就像我们在Solaris或bash shell中所做的那样)?实际上,通过谷歌可以找到许多解决方案,但我只是偶然发现了一个,并喜欢它的简洁性。您可以在两个日期使用其ansi_dn函数并计算差值 diff_dates.sh: #!/bin/ksh . ./ansi_dn.sh date_to="$1" date_from="$2" echo $(( $(ans

在hp ux中,由于没有可用的GNU
date
,即
date
命令的
-d
-s
选项不可用。我如何找出两个给定日期在几天内的差异(就像我们在Solaris或bash shell中所做的那样)?

实际上,通过谷歌可以找到许多解决方案,但我只是偶然发现了一个,并喜欢它的简洁性。您可以在两个日期使用其
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

日期的格式是什么?它们的格式是dd/mm/yyyy,您需要以十年/月/小时/微秒为单位的差异。。。?您需要更具体地说明您正在尝试做什么。我想要以天为单位的差异。但是上面的脚本ansi_dn.sh的内容是什么code@KVR_GROUPS:我在第一句中链接到的函数,在这个答案中找到:你能解释一下吗?具体解释一下什么?你复制我链接到你的脚本的函数,并像我在回答中所显示的那样调用它。你能说它到底在做什么,因为我不理解这些奇怪的代码行吗