2017-04-21 140 views
-1
endDate=`date +%m-%d-%Y` 
endDate=`expr $endDate -7` 
echo "$endDate" 

上面的代码给出错误,但是下面的代码运行正常。我想使用上面的日期格式;我怎么做到这一点?Shell脚本日期

TODAY=`date +%d` 
TODAY=`expr $TODAY - 7` 
echo $TODAY 

回答

2

您遇到的错误“expr:非整数参数”应显示您遇到的问题;当你尝试从“04-14-2017”减去7时,你没有得到你所期望的。上周得到的,你可以在-d标志传递得到一个特定的日期,而不是“现在”

endDate=`date -d '7 days ago' +"%m-%d-%Y"` 
echo $endDate 
+0

完美谢谢克里斯 – Satte

0

你的第二组命令的工作,因为date +%d返回一个数字的默认值,你可以减去7一个号码。您的第一组命令失败,因为date +%m-%d-%Y返回一串字符,并且不能从字符串中减去7。

对于date命令,正确和安全地执行日期数学有点过于复杂,尤其是如果您的时区带有夏令时。我推荐一个perl模块,如Date :: EzDate或DateTime。

+0

管理这个的正确方法是将1970年(UTC)的起始日期转换为秒,以秒为单位进行数学运算,然后将最终的UTC转换为所需的日期格式 – aicastell