Days of the week

【実行画面】

【Head Source】
Head に書かれているソースコードです。
<script type="text/javascript">
  WTBL = ["日","月","火","水","木","金","土"];
  MTBL = [0,31,59,90,120,151,181,212,243,273,304,334];

    // 通算日数を計算する関数
    function Days(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) + MTBL[m-1] + d;
        if (m<3 && Uruu(y))    w--;
        return(w);
    }
    // 閏年を調べる関数
    function Uruu(y)
    {   if (y%400==0)  return(true);
        if (y%100==0)  return(false);
        if (y%4==0)    return(true);
        return(false);
    }
    // 曜日を調べる関数
    function Week(num)
    {   var n= (num)%7;
        return WTBL[n];
    }
</script>
【Source Code】
実行画面(body) に書かれているソースコードです。
<script type="text/javascript">
    var str = prompt("記念日をタイプして下さい", "1995/1/17");
    ymd = str.split('/');
    var n = Days(ymd[0],ymd[1],ymd[2]);
    var wek = Week(n);
    alert("記念日 " + str + "(" + wek + "曜日)" + "  通算日数:" + n);
</script>
  1. コンソールから年月日を入力して、曜日と通算日数を表示します。
    prompt() でタイプ入力された年,月,日を '/' で切り分けて配列(ymd) に格納します。
    Days() が、西暦1年1月1日から yy, mm, dd までの通算日数を調べるメソッドです。
    グレゴリオ暦に西暦1年などは存在しませんが、便宜上あるものとして計算します。
    通算日数が求まれば、曜日は簡単に計算できます。
    グレゴリオ暦の説明は クレオパトラとシーザーの暦 を参照して下さい。
  2. Head でテーブルとメソッドを定義します。
    WTBL は曜日のテーブルです。
    MTBL[12] は大の月と小の月のテーブルで、累積した日数を格納します。
    Days() が、西暦1年1月1日から yy, mm, dd までの通算日数を調べるメソッドです。
    Uruu() が、閏年を調べるメソッドです。
    Week() が、通算日数で指定された日付の曜日を調べるメソッドです。
  3. プログラムを起動すると【実行画面】のソースコードが実行されます。
    記念日を西暦年でタイプすると、曜日と通算日数が表示されます。
  4. 記念日抜粋
    日付 通算日数 曜日 説明
    1/1/1 1 西暦元年元旦
    1995/1/17 728310 阪神淡路大震災
    1997/8/31 729267 ダイアナ妃交通事故死
    2001/9/11 730739 アメリカ航空機テロ
    2011/3/11 734207 東日本大震災

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