试图找到Shell脚本中的确切剩余天数$(日期+%j)

fal*_*uio 1 unix linux shell date

我正在尝试这个简单的脚本,但不知何故我每次额外获得2天:

#!/bin/bash
date=$(date +%j)
remaining="$(( 365 - $date))"
echo $remaining
Run Code Online (Sandbox Code Playgroud)

2015年1月12日,我剩下355天,而应该是353天.

日期和一切都很好.

tha*_*guy 5

日期编号以前导零输出:

$ date +%j
012
Run Code Online (Sandbox Code Playgroud)

这意味着该数字将被解释为八进制,八进制012等于十进制10(这就是为什么它被2关闭).您可以手动指定基数来覆盖默认解释:

date=$(date +%j)
remaining="$(( 365 - 10#$date))"
echo "$remaining"
Run Code Online (Sandbox Code Playgroud)

1月12日今天给出353.

作为旁注,如果您想获得当前年份的总天数而不是硬编码365,您可以使用:

days_this_year=$(date -d "$(date +%Y)/12/31" +%j)
Run Code Online (Sandbox Code Playgroud)

  • `remaining = $((10#$(date -d"Dec 31"+%j) - 10#$(date +%j)))` - 依赖于语言环境 (2认同)