如何减去两种不同的日期格式以获得bash的日期?

时间:2015-09-30 09:02:25

标签: bash shell date unix

我正在打击bash。我必须从给定日期减去当前日期以获得差异的天数。给定日期的格式为 m / d / yyyy ,而不是 2015年9月26日 2015年9月26日。因此,即使我尝试将两个日期转换为相同的格式并减去它,也表示无效的日期格式。

           date1=$(date +"%F")
           date2=$(date -d 11/2/2015 +"%F")
           diff=$(date "--date=${date2} -${date1}" +%F)
           echo $diff days remaining

这是我尝试过的一些变化,但不起作用。我究竟做错了什么?提前谢谢。

2 个答案:

答案 0 :(得分:2)

试试这个:

let diff=(`date +%s -d 11/2/2015` - `date +%s`)/86400
echo $diff days remaining

答案 1 :(得分:2)

有两个问题:将用户提供的日期转换为标准化形式,并计算天数差异。

正常化日期

date如何解释日期字符串取决于当前的语言环境。 尝试查找使用特殊格式(%m/%d/%Y)的区域设置:

$ LC_TIME=en_US.UTF-8 date -d 1/2/2015
Fri Jan  2 00:00:00 CET 2015

计算差异

bash只能执行整数运算,因此首先将日期转换为某个整数表示,执行减法并将表示转换为天数(如果需要)。

$ LC_TIME=en_US.UTF-8 \
  echo $(( ( $(date -d 11/2/2015 +%s) - $(date +%s)) / (3600*24) ))
32

这使用$(...)代替...来替换功能。 它还使用...来计算数学表达式而不是bashism $(( ... )),因此您可以在符合POSIX的shell脚本中使用它(例如由 / bin / dash 解释)