zellerの公式No.08922
いちもんじ さん 19/02/27 17:29
 
西暦年、月、日からzellerの公式を使って、曜日を求めるマクロを作成中で苦戦して
いるところです。

下記マクロで2019年2月27日を入力してみると
結果は、0(日曜日)となります。
  0:日曜日 1:月曜日 2:火曜日 3:水曜日 4:木曜日 5:金曜日 6:土曜日

マクロは下記のサイトを参考にさせていただいています。
http://tancro.e-central.tv/cgi-bin/subZeller.cgi

秀丸エディタ(浮動小数点数)は、Ver.8.88 β15 です。

HideMath.dllが原因かも...と思い、質問させていただきましたが、
こちらへの投稿は適切でないかも知れません。ご容赦ください。

-----以下は自作マクロ---------------------------------------------------------
//zeller.mac

setfloatmode 1;
loaddll "HideMath.dll";
if( !result ) {
    message "HideMath.dllのロードに失敗しました。";
    endmacro;
}

//Zeller の公式
 #year = 2019;
 #month = 2;
 #day = 27;

 #a1 = #year;
 #a2 = dllfunc("Floor",#year / 4);
 #a3 = dllfunc("Floor",#year / 100);
 #a4 = dllfunc("Floor",#year / 400);
 #a5 = dllfunc("Floor",( 13 * #month + 8 ) / 5);

  #Youbi = ( #a1 + #a2 - #a3 + #a4 + #a5 + #day) % 7;

 message "Zeller:" + str(#Youbi);

endmacro;

[ ]
RE:08922 zellerの公式No.08923
いちもんじ さん 19/02/27 17:51
 
>西暦年、月、日からzellerの公式を使って、曜日を求めるマクロを作成中で苦戦し
>ているところです。

補足です。

マクロの結果とdayofweeknum関数の結果とが合わないということで悩んでいます。

[ ]
RE:08923 zellerの公式No.08924
ヒラメ さん 19/02/27 17:57
 
こんにちは。横から失礼いたします。
秀丸エディタユーザーのヒラメと申します。

私も以前興味があってツェラーの公式で曜日を計算するマクロを組んだことがありま
したので、そのマクロの抜粋を記載してみます。よろしければご参考にしてみてくだ
さい。(浮動小数点モードである必要はありません)



call Zeller "2019", "2", "27";
message str(##return); // 3 が表示される


endmacro;

Zeller:
//ツェラーの公式により日付から曜日を計算する
// call Zeller $1,$2,$3
//        $1: 年
//        $2: 月
//        $3: 日
// 戻り値 ##return: 0: 日 1: 月 2: 火 3: 水 4: 木 5: 金 6: 土
// 使用方法
// call Zeller $year, $month, $day;
// message str(##return);
##y = val($$1);
##m = val($$2);
##d = val($$3);
if(##m < 3){
  ##y = ##y - 1;
  ##m = ##m + 12;
}
##w = (##y + ##y / 4 - ##y / 100 + ##y / 400 + (13 * ##m + 8) / 5 + ##d) % 7;
//message str(##y)+"/"+str(##m)+"/"+str(##d)+"="+str(##w);
return ##w;

[ ]
RE:08924 zellerの公式No.08925
いちもんじ さん 19/02/27 18:14
 
>私も以前興味があってツェラーの公式で曜日を計算するマクロを組んだことがあり
>ましたので、そのマクロの抜粋を記載してみます。よろしければご参考にしてみて
>ください。(浮動小数点モードである必要はありません)

ヒラメさん
 コメントをいただきありがとうございます。

if(##m < 3){
  ##y = ##y - 1;
  ##m = ##m + 12;
}

がポイントだったのですね。
助かりました。

秀まるおさま
 要望としてですが、dayofweeknum関数で、年月日をパラメータに
 指定した日付の曜日を返すという風に拡張していただけないでしょうか?

[ ]