我正在编写一个bash脚本,该脚本将打印用户生日的周数,天数和小时数。用户只会填写他的出生日期和月份。 我搜索并发现我们可以区分两个日期:
let DIFF=(`date +%s -d 20150108`-`date +%s -d today`)/86400
echo $DIFF
上述脚本将打印指定日期的剩余天数。我们可以类似地找出周和小时的数量。
但问题是,如果用户只给出了除年份之外的出生日期(这里他只给出了1月8日),我如何计算出即将到来的生日和今天之间可能出现的最小差异?
例如,如果生日刚刚过去,那么我必须考虑明年的生日。
答案 0 :(得分:1)
只是检查日期是否已经发生在今年,以及它是否确实在明年附加到输入中。
> input="8 Feb"
> input=$(date -d "$input" '+%d %b')
> [[ $(date -d "$input" '+%s') -lt $(date -d "$(date '+%d/%m/%y')" '+%s') ]] && input="$input $(( $(date '+%Y') + 1 ))"
> let DIFF=(`date +%s -d "$input"`-`date +%s -d today`)/86400
> echo $DIFF
360
一些警告。如果用户输入第二行,则从日期开始剥离年份和其他信息(时间等等)。并且需要第三行中的$(date -d "$(date '+%d/%m/%y')" '+%s')
,因此它仅与当前日期进行比较,而不是与时间日期进行比较。
答案 1 :(得分:0)
计算天数的另一种方法是使用date
的{{1}}格式代码,该代码返回年份中的日期编号(001和366之间的三位数整数)。 (注意:我们将%j
添加到1
的输出中,使其成为一个不以date +%j
开头的四位整数,以避免八进制转换。)
0