今日の日付をクリスマスイブイブ…の形式で表示

今日の日付をクリスマス イブイブ...の形式で表示する - みずぴー日記 にインスパイヤされて、何を考えているのか今頃やってみます。

少し仕様を変更して以下のようにしてみました。

  • 今年のクリスマスがまだの場合には、今年のクリスマスまでをカウントする
  • 今年のクリスマスが過ぎた場合には、来年のクリスマスまでをカウントする

また、gawk の日付関数を用いて処理しています。

#! /usr/local/bin/gawk -f
# eve.awk
# クリスマスをカウントします
# usage: gawk -f eve.awk

BEGIN {
    now_unix_time = mktime(strftime("%Y %m %d 00 00 00"));

    if (strftime("%m") + 0 == 12 && strftime("%d") + 0 > 25) {
        christmas_unix_time = mktime(strftime("%Y") + 1 " 12 25 00 00 00");
    } else {
        christmas_unix_time = mktime(strftime("%Y 12 25 00 00 00"));
    }

    diff = (christmas_unix_time - now_unix_time) / (60 * 60 * 24);

    print "クリスマス" repeat_str("イブ", diff);
}

function repeat_str(str, num,    result) {
    for (i = 1; i <= num; i++) {
        result = result str;
    }

    return result;
}

さて、実行してみます。

$ gawk -f eve.awk
クリスマスイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブ\
イブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブ\
イブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブ\
イブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブ\
イブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブ\
イブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブ\
イブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブ\
イブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブ\
イブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブ\
イブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブ\
イブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブ\
イブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブ\
イブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブ\
イブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブ\
イブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブ\
イブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブ\
イブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブ\
イブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブ\
イブイブイブイブイブイブイブイブイブイブイブイブイブイブイブイブ

すっかり何がなんだか分からない状態になってしまいましたので、要はあと何日かを求めてみます。

$ gawk -f eve.awk | gawk '$0=gsub("イブ", "")'
355

よく初心者が間違うミスに『gsub() 関数の戻り値』がありますが、gsub() 関数の戻り値は置換に成功した個数なので、クリスマスまであと 355 日であることがわかります。

tag_gawk.png tag_gawk.png