使用Shell查找两个日期后的天数

时间:2019-03-20 14:43:03

标签: linux shell

我想查找两个给定日期(分别为2017年8月25日和2017年9月5日)的天数。

我的脚本:

start='2017-08-25';
end='2017-09-05';
ndays=(strtotime($end)- strtotime($start))/24/3600;
echo $ndays

运行此脚本时,出现以下错误消息。

Line 3: syntax error near unexpected token `('

期望输出值:

10

2 个答案:

答案 0 :(得分:2)

据我所知,没有任何外壳可用于处理日期。至少,您需要像date这样的外部工具才能将日期转换为中间形式,例如自某个固定时间点以来的秒数(Unix使用1970年1月1日),然后使用这些值,然后再进一步处理结果。

假设使用Linux标记中的GNU date,您将执行类似的操作

start='2017-08-25'
end='2017-09-05'

start_seconds=$(date +%s --date "$start" --utc)
end_seconds=$(date +%s --date "$end" --utc)

ndays=$(( (end_seconds - start_seconds) / 24 / 3600 ));
echo $ndays

请注意,由于大多数外壳程序仅支持整数算术运算,因此无法提供确切的天数。

答案 1 :(得分:1)

您可以使用date将每个日期转换为纪元秒,然后使用算术扩展进行减法并将其转换回天:

#! /bin/bash
start='2017-08-25';
end='2017-09-05';

diff=$(date -d $end +%s)-$(date -d $start +%s)
echo $(( ($diff) / 60 / 60 / 24 ))  # 11