我正在打击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
这是我尝试过的一些变化,但不起作用。我究竟做错了什么?提前谢谢。
答案 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 解释)