2008年3月1日土曜日

日数計算・曜日計算

COMを利用した、日付を扱うモジュールです。

指定した日の曜日を算出する関数と、指定した2つの日の差(日数)を算出する関数を含んでいます。
日数算出は「あと何日あるか」を算出するので、このサンプルプログラムのように「全部で何日か」を計算する場合は1を足す必要があります。

/*
    日付を扱うライブラリになりそうなもの。
    ※ 注意!パラメータチェック&エラーチェック処理未実装!

    参考:http://tsu.sakura.ne.jp/article/note/eid512.html
*/


#module
// ミリ秒を日に変換
#define ctype cnvMsec2Day(%1int((%1)/86400000)  // 86400000 = 1000*60*60*24
// javascript数式の計算
#defcfunc jsEval str jsExp
    if vartype(mssc) != vartype("comobj") {
        newcom mssc, "MSScriptControl.ScriptControl"
        comres result
        mssc("Language") = "JScript"
    }
    mssc -> "Eval" jsExp
    return result
// 曜日を返す(0~6)
#defcfunc getDayOf int y, int m, int d
    return int(jsEval("(new Date(" + y + "," + (m - 1) + "," + d + ")).getDay();"))
// 時間差を日数で返す
#defcfunc getSub int y1, int m1, int d1, int y2, int m2, int d2
    return cnvMsec2Day(jsEval("Date.UTC(" + y2 + "," + (m2 - 1) + "," + d2 + ") - Date.UTC(" + y1 + "," + (m1 - 1) + "," + d1 + ");"))
#global

// モジュールここまで
    day = "日""月""火""水""木""金""土"
    mes "今年は" + (1 + getSubgettime(0), 11gettime(0), 1231 )) + "日間です"
    mes "今日は" + day( getDayOfgettime(0), gettime(1), gettime(3) ) ) + "曜日です"
    stop

0 件のコメント: