先日の「Glaejaで1ヶ月表示のカレンダーを作る」の中で、その月の1日の曜日を調べる必要があり、以下のようなコードを書きました。
$f$@p@8@p@+@x@$d$@p@-@x@$d$@p@7@p@/@x@floor@x@7@p@*@x@+@x@7@p@mod@x@gcal@Q@
これは以下の公式にそって書かれたものです。
1日の曜日=(今日の曜日+8-今日の日付+7×(今日の日付を7で割った正数))を7で割った剰り
が、よくよく考えればGlaejaでは(修正)ユリウス通日が使えるので、それを使って曜日を求めることもできます。
- 本記事は広告およびアフィリエイトプログラムによる収益を得ています。
修正ユリウス通日から曜日を求めよう
Wikipediaによれば
七曜日の求め方
該当日の修正ユリウス日を7で割り、余りを求める。余りが0より小さい場合は7を加える。下記の換算表により曜日に変換する。これは本質的にはツェラーの公式と同等である。
修正ユリウス日による曜日の換算表 余り 0 1 2 3 4 5 6 曜日 水 木 金 土 日 月 火
とのことです。
これをGlaejaで表すと
$yyyyMM011200$@p@mjd@x@floor@x@7@p@mod@x@.0@P@
となります。
「$yyyyMM011200$@p@」で今月1日12時(201401011200)をスタックに積み
「mjd@x@」で修正ユリウス通日に返還し、
「floor@x@」で切り下げで整数化し、
「7@p@mod@x@」で7で割った余りを求め、
「.0@P@」でそれを表示しています。
ウィジェット変数gcalに納める場合は
$yyyyMM011200$@p@mjd@x@floor@x@7@p@mod@x@gcal@Q@
となります。最初のものに比べてはるかに短くなりましたね。ただ、数字と曜日の関係は変わってしまっているので、そこは注意が必要です。
応用
ちょっと応用して、いろんな日の曜日(の数字)を求めてみましょう。
今月末日の曜日
$yyyyMMl1200$@p@mjd@x@floor@x@7@p@mod@x@.0@P@
先月1日の曜日
$yyyyMM011200$@p@1000000@p@-@x@mjd@floor@x@x@7@p@mod@x@.0@P@
先月末日の曜日
$yyyyMM011200$@p@10000@p@-@x@mjd@x@floor@x@7@p@mod@x@.0@P@
来月1日の曜日
$yyyyMM011200$@p@1000000@p@+@x@mjd@x@floor@x@7@p@mod@x@.0@P@
来月末日の曜日
$yyyyMMl1200$@p@10000@p@+@x@mjd@x@floor@x@7@p@mod@x@.0@P@
今月末日の曜日を英語で
$yyyyMMl1200$@p@mjd@x@floor@x@7@p@mod@x@Wed,Thu,Fri,Sat,Sun,Mon,Tue@m@
はたしてこれらが役に立つのかどうかはわかりませんが、そんなところで。