在bash中查找日期(仅给出日期和月份)和今天之间的最小差异

时间:2014-02-12 18:03:22

标签: bash shell

我正在编写一个bash脚本,该脚本将打印用户生日的周数,天数和小时数。用户只会填写他的出生日期和月份。 我搜索并发现我们可以区分两个日期:

let DIFF=(`date +%s -d 20150108`-`date +%s -d today`)/86400
echo $DIFF

上述脚本将打印指定日期的剩余天数。我们可以类似地找出周和小时的数量。
但问题是,如果用户只给出了除年份之外的出生日期(这里他只给出了1月8日),我如何计算出即将到来的生日和今天之间可能出现的最小差异?
例如,如果生日刚刚过去,那么我必须考虑明年的生日。

2 个答案:

答案 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