記念日の曜日

【実行画面】

【Calendar Class】
Calendar Class のソースファイル(calendar.js)です。
function Calendar()
{   this.WTBL = ["日","月","火","水","木","金","土"];
    this.MTBL = [0,31,59,90,120,151,181,212,243,273,304,334];

    // 通算日数を計算する関数
    this.Days = function(yy,mm,dd)
    {   var y= parseInt(yy);
        var m= parseInt(mm);
        var d= parseInt(dd);
        var w= (y-1)*365;           //年*365
        w+= Math.floor(y/4) - Math.floor(y/100) + Math.floor(y/400) + this.MTBL[m-1] + d;
        if (m<3 && this.Uruu(y))    w--;
        return(w);
    }
    // 閏年を調べる関数
    this.Uruu = function(y)
    {   if (y%400==0)  return(true);
        if (y%100==0)  return(false);
        if (y%4==0)    return(true);
        return(false);
    }
    // 曜日を調べる関数
    this.Week = function(num)
    {   var n= (num)%7;
        return this.WTBL[n];
    }

    var date= new Date();
    var yy= date.getFullYear();
    var mm= date.getMonth()+1;
    var dd= date.getDate();
    this.num= this.Days(yy,mm,dd);
}
【Source Code】
実行画面(body) に書かれているソースコードです。
<script type="text/javascript">
    var str = prompt("記念日をタイプして下さい", "1995/1/17");
    ymd = str.split('/');
    var cls = new Calendar();
    var n = cls.Days(ymd[0],ymd[1],ymd[2]);
    var cnt = cls.num - n + 1;
    var wek = cls.Week(n);
    alert("記念日 " + str + "(" + wek + "曜日)" + "  経過日数:" + cnt);
</script>

  1. コンソールから記念日を入力して、曜日と経過日数を表示します。
    Days of the week の Class 版です。
    Head 内に "calender.js" を取り込みます。
    <script src="calender.js">
    </script>
    
  2. Calendar クラスを定義した calendar.js の説明です。
    this. で始まるのが Calendar クラスの内部変数と内部メソッドです。
    WTBL は曜日のテーブルです。
    MTBL[12] は大の月と小の月のテーブルで、累積した日数を格納します。
    Days() が、西暦1年1月1日から yy, mm, dd までの通算日数を調べるメソッドです。
    Uruu() が、閏年を調べるメソッドです。
    Week() が、通算日数で指定された日付の曜日を調べるメソッドです。
    Date() で本日の日付を取得して、西暦1年1月1日からの通算日数を保存します。
    this.Days() 関数の呼び出しは、メソッドを定義した行の後に置かなければならないようです。
        var date= new Date();
        var yy= date.getFullYear();
        var mm= date.getMonth()+1;
        var dd= date.getDate();
        this.num= this.Days(yy,mm,dd);
    
  3. prompt() で記念日をタイプ入力して、年,月,日を '/' で切り分けて配列(ymd) に格納します。
    new Calendar() で Class をインスタンス化して cls.Days() で記念日の通算日数を求めます。
    cls.Week(n) で記念日の曜日を求めます。
    本日の通算日数から記念日の通算日数を引いた値が経過日数です。
  4. 記念日抜粋
    日付 通算日数 曜日 説明
    1/1/1 1 西暦元年元旦
    1995/1/17 728310 阪神淡路大震災
    1997/8/31 729267 ダイアナ妃交通事故死
    2001/9/11 730739 アメリカ航空機テロ
    2011/3/11 734207 東日本大震災

前田稔の超初心者のプログラム入門
超初心者のプログラム入門(JavaScript)