web-dev-qa-db-ja.com

GNU / Linux日付コマンド序数サフィックス

PHP date 関数は、 'st'、 'nd'、 'rd'などの日付の序数接尾辞を追加する機能を提供します。 。Linuxでdateコマンドを使用して同じことを実現することは可能ですか?

1
sebshady

一般的なdate実装はそれ自体ではこれを行うことができないと思います。選択した「ワイルドカード」を使用してカスタム形式を要求し、それを処理することができます。例:

LC_ALL=C date '+%B %eXX %Y' | sed -e 's/11XX/11th/' -e 's/12XX/12th/' -e 's/13XX/13th/' -e 's/1XX/1st/' -e 's/2XX/2nd/' -e 's/3XX/3rd/' -e 's/XX/th/'

ロケールに関係なくコマンドをテストできるように、LC_ALL=Cを使用しました。


このsedコマンドが「ワイルドカード」を使用してさまざまな日付を処理する方法を確認するには、次のコマンドを実行します。

sed -e 's/11XX/11th/' -e 's/12XX/12th/' -e 's/13XX/13th/' -e 's/1XX/1st/' -e 's/2XX/2nd/' -e 's/3XX/3rd/' -e 's/XX/th/' << EOF
October  1XX 2019
October  2XX 2019
October  3XX 2019
October  4XX 2019
October 10XX 2019
October 11XX 2019
October 12XX 2019
October 13XX 2019
October 14XX 2019
October 20XX 2019
October 21XX 2019
October 22XX 2019
October 23XX 2019
October 24XX 2019
October 30XX 2019
October 31XX 2019
EOF

%eは、1桁の数字に先頭のスペース文字を埋め込みます。あなたはこれを望まないかもしれません。 dateの実装によっては、これを回避できる場合があります(date from GNU coreutils?use %-d)。私の例に対する移植可能な修正は次のとおりです。 sed-e 's/ / /'で展開します。

0