如何在bash中减去两种不同的日期格式来获得天数?

如何在bash中减去两种不同的日期格式来获得天数?,bash,shell,date,unix,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)

我正在制作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
这是我尝试过的一些变化,但不起作用。我做错了什么?提前感谢。

试试这个:

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

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

有两个问题:将用户提供的日期转换为规范化的形式,以及以天为单位计算差异

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

计算差异 bash only只能执行整数运算,因此请先将日期转换为某种整数表示形式,然后执行减法运算并将表示形式转换为天(如果需要)

这使用
$(…)
而不是
..
来进行函数替换。
它还使用
$(…)
来评估数学表达式,而不是bashism
let x=()
,因此您可以在符合POSIX的shell脚本中使用它(例如,由/bin/dash解释)

存在两个问题:将用户提供的日期转换为规范化形式和以天为单位计算差异

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

计算差异 bash only只能执行整数运算,因此请先将日期转换为某种整数表示形式,然后执行减法运算并将表示形式转换为天(如果需要)

这使用
$(…)
而不是
..
来进行函数替换。
它还使用
$(…)
来评估数学表达式,而不是bashism
let x=()
,因此您可以在符合POSIX的shell脚本中使用它(例如,由/bin/dash解释)

在尝试
日期--date=${date2}-${date1}+%F
之前是否检查了
日期的手册页?还是你做了补丁?我查过手册页了。我曾尝试使用%s和除以86400来转换它们,但这也不起作用,因为它将日期改为d/m/yyyy。在尝试
date--date=${date2}-${date1}+%F
之前,您是否检查了
date
的手册页?还是你做了补丁?我查过手册页了。我曾尝试使用%s和除以86400来转换它们,但这也不起作用,因为它将日期改为d/m/yyyy。此代码工作正常。但我如何将2015年11月2日转换为20151102,作为我从文件中读取的给定日期。此代码运行良好。但我如何将2015年11月2日转换为20151102,作为我从文件中读取的给定日期。
$ LC_TIME=en_US.UTF-8 \
  echo $(( ( $(date -d 11/2/2015 +%s) - $(date +%s)) / (3600*24) ))
32