Command-Line

如何從命令行生成年/季日期?

  • November 2, 2021

我有興趣輸出目前年度季度以及上個月的年度季度的表示。

如果今天是 2012 年 1 月 1 日,我想得到

2012q1

2011q4

作為各自的輸出。

一種(有點難看)解決方案,使用 BASH 算術評估和 GNUdate命令:

echo $(date +%Y)q$(( ($(date +%-m)-1)/3+1 ))
echo $(date -d "-1 month" +%Y)q$(( ($(date -d "-1 month" +%-m)-1)/3+1 ))

請注意,%-m防止date0 填充,因此這仍然適用於 8 月和 9 月。

所有除以四的解決方案都會失敗,例如 11 月:

% echo $(( 11/4+1 ))
3

正確的數學是:

$(( (m-1)/3 +1 ))

因此,目前和上個月的季度將是:

echo curr ${y}q$(((m-1)/3+1))
if [ $m = 1 ]; then
 echo prev $((y-1))q4
else
 echo prev ${y}q$(((m-2)/3+1))
fi

只需要檢查十二個值,真的……

% for m in {1..12}; do echo $m Q$(((m-1)/3+1)); done
1 Q1
2 Q1
3 Q1
4 Q2
5 Q2
6 Q2
7 Q3
8 Q3
9 Q3
10 Q4
11 Q4
12 Q4

引用自:https://unix.stackexchange.com/questions/31692