在 bash 和 shell 脚本中将格式“1000 天”转换为格式 2 年、9 个月、0 天的 KISS 方法是什么?

fut*_*ave 2 bash shell-script date

在 shell 脚本中将“1000 天”等格式转换为“2 年,9 个月,0 天”格式的“保持简单”方法是什么?

我考虑过应用模数或地板舍入。我研究过类似的问题,但它们并不是朝着“简短”的方向发展,而是有额外的要求,使一切变得比必要的更加复杂。

Sté*_*las 6

dateutils

$ today=$(dseq -f %F now)
$ ddiff -f '%y years, %m months and %d days' "$today" "$(dadd "$today" 1000)"
2 years, 8 months and 26 days
Run Code Online (Sandbox Code Playgroud)

鉴于月份的天数不同,您会发现结果取决于开始日期(此处为今天)。

在某些系统上,实用程序的名称dateutilsdateutils.( dateutils.dseq, dateutils.dadd, dateutils.ddiff) 为前缀,以与其他包中类似命名的命令消除歧义。