我想查找两个给定日期(分别为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
答案 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