确定日期之间的持续时间

时间:2012-02-18 03:38:26

标签: bash date duration

我对BASH的编程还很陌生,而且我正在努力解决问题。我正在尝试为我的工作编写脚本代码,这样可以很容易地计算在定期结束日期之前取消的给定包裹的退款。现在简单的东西,如输入和其他类似的东西,我相信我可以通过谷歌搜索和实验找出(虽然你应该选择帮助我,我会非常感激)。

我不确定自己能找到怎样做的是一个脚本或一组命令,它们能够计算两个日期之间的天数/月数,并使用该变量来计算总的数量。退款。我会试着解释一下我在这里要做的事情:

输入两个日期(MM / DD / YYYY格式)并获得月和日的差异,IE 3个月13天。

输入基本月费率

(基数*月数)+((基数/ 30)*#天数)= Ammount客户使用

输入客户支付的金额 - 使用Ammount = Ammount退款

然后最好以人们可以用来“展示他们的作品”的方式打印它

我知道要求帮助有点多,但我真的可以用日期计算器。

提前感谢您的帮助!

PS我事先做了一些搜索,我发现了类似的问题,但没有任何东西真正符合我的需要。

4 个答案:

答案 0 :(得分:2)

使用我的dateutils,您可以选择

ddiff '2010-12-05' '2012-04-10' -f '%mmo %dd'
=>
  16mo 5d

答案 1 :(得分:0)

python中,您可以使用datetime.strptime()模块中的datetime方法:

$ from=01/25/2011 to=01/30/2012
$ dur=`python -c "from datetime import datetime; print((datetime.strptime('$to', '%m/%d/%Y')-datetime.strptime('$from', '%m/%d/%Y')).days)"`
$ echo $dur
370

答案 2 :(得分:0)

假设您不希望days大于30,那么这将在bash中完成:

date1="12/20/2011"
date2="02/18/2012"

y1=${date1/*\/*\//}
y2=${date2/*\/*\//}

m1=${date1/\/*\/*/}
m2=${date2/\/*\/*/}

d1=${date1/\/$y1/}
d1=${d1/$m1\//}
d2=${date2/\/$y2/}
d2=${d2/$m2\//}

m=$(( $y2 * 12 - $y1 * 12 + $m2 - $m1 ))
d=$(( $d2 - $d1 ))
test $d -lt 0 && { d=$(( $d + 30 )); m=$(( $m - 1 )); }

echo "$m month(s) and $d day(s)."

如果DDMM总共有2个字符,则可以使用以下内容简化日期解析:

y1=${date1:6:4}
y2=${date2:6:4}

m1=${date1:0:2}
m2=${date2:0:2}

d1=${date1:3:2}
d2=${date2:3:2}

答案 3 :(得分:0)

使用awk,你可以:

date1="12/20/2011"
date2="02/19/2012"
echo -e "$date1\n$date2" | awk -F "/" -v base=15 '
  NR == 1 {m1=$1; d1=$2; y1=$3}
  NR == 2 {m2=$1; d2=$2; y2=$3}
  END{m=12*(y2-y1) + m2-m1; d=d2-d1; m=d<0 ? m-1 : m; d=d<0 ? d+30 : d
    print m " month(s) and " d " day(s)"
    print "refund: " (base*m + (base/30.0)*d) "€"}'