如何在shell脚本(KSH shell)中查找与存储在变量中的日期之间的差异
在hp ux中,由于没有可用的GNU如何在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
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
让我们用GNUdate
验证正确性:
$ 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:我在第一句中链接到的函数,在这个答案中找到:你能解释一下吗?具体解释一下什么?你复制我链接到你的脚本的函数,并像我在回答中所显示的那样调用它。你能说它到底在做什么,因为我不理解这些奇怪的代码行吗