Sté*_*las 11
虽然bash现在具有日期格式化功能,但它没有日期解析或计算功能,因此您可能需要使用另一种 shell,例如ksh93orzsh或适当的编程语言,例如perlor python。
使用ksh93,困难的部分是找出支持的日期格式,因为它几乎没有记录(尽管示例,您始终可以查看测试数据)。
例如,它确实支持类似 crontab 的时间规范,然后为您提供下一次匹配规范的时间,因此您可以执行以下操作:
now=$(printf '%(%s)T')
next_10th=$(printf '%(%s)T' '* * 10 * *')
echo "Pay day is in $(((next_10th - now) / 86400)) days"
Run Code Online (Sandbox Code Playgroud)
现在使用标准实用程序,实现起来并不难:
eval "$(date '+day=%d month=%m year=%Y')"
day=${day#0} month=${month#0}
if [ "$day" -le 10 ]; then
delta=$((10 - day))
else
case $month in
[13578]|10|12) D=31;;
2) D=$((28 + (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))));;
*) D=30;;
esac
delta=$((D - day + 10))
fi
echo "Pay day is in $delta days"
Run Code Online (Sandbox Code Playgroud)
dom = 一个月中的哪一天
dom=6 ; \
days=$[ ${dom}-$(date +%-d) ] ; \
[ ${days} -lt 0 ] && days=$[ ${days} + $(date +%d -d "$(date +%Y%m01 -d 'next month') yesterday") ] ; \
echo ${days} days
30 days
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1093 次 |
| 最近记录: |