我对BASH的编程还很陌生,而且我正在努力解决问题。我正在尝试为我的工作编写脚本代码,这样可以很容易地计算在定期结束日期之前取消的给定包裹的退款。现在简单的东西,如输入和其他类似的东西,我相信我可以通过谷歌搜索和实验找出(虽然你应该选择帮助我,我会非常感激)。
我不确定自己能找到怎样做的是一个脚本或一组命令,它们能够计算两个日期之间的天数/月数,并使用该变量来计算总的数量。退款。我会试着解释一下我在这里要做的事情:
输入两个日期(MM / DD / YYYY格式)并获得月和日的差异,IE 3个月13天。
输入基本月费率
(基数*月数)+((基数/ 30)*#天数)= Ammount客户使用
输入客户支付的金额 - 使用Ammount = Ammount退款
然后最好以人们可以用来“展示他们的作品”的方式打印它
我知道要求帮助有点多,但我真的可以用日期计算器。
提前感谢您的帮助!
PS我事先做了一些搜索,我发现了类似的问题,但没有任何东西真正符合我的需要。
答案 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)."
如果DD
和MM
总共有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) "€"}'