支払日数の計算

支払日数の計算

今後の支払い日までの残り日数を表示する必要があります(常に毎月10日であると仮定)。

Bashでこれを行うにはどうすればよいですか?

ベストアンサー1

bash現在、日付書式設定機能はありますが、ksh93日付解析や計算機能はzshありません。 または、他のシェルや適切なプログラミング言語を使用する必要があります。perlpython

の場合、ksh93文書化がほとんどないため、サポートされている日付形式を見つけるのが難しい部分です(常に確認できます)。テストデータ例を見てください)。

たとえば、crontabに似た時間仕様をサポートし、仕様と一致する次の時間を提供するので、次のことができます。

now=$(printf '%(%s)T')
next_10th=$(printf '%(%s)T' '* * 10 * *')

echo "Pay day is in $(((next_10th - now) / 86400)) days"

これで標準ユーティリティがあるので、実装するのはそれほど難しくありません。

eval "$(date '+day=%d month=%m year=%Y')"
day=${day#0} month=${month#0}
if [ "$day" -le 10 ]; then
  delta=$((10 - day))
else
  case $month in
    [13578]|10|12) D=31;;
    2) D=$((28 + (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))));;
    *) D=30;;
  esac
  delta=$((D - day + 10))
fi
echo "Pay day is in $delta days"

おすすめ記事