日々のコンピュータ情報の集積と整理

Dr.ウーパのコンピュータ備忘録

2015年3月27日金曜日

JavaScript:月・日・曜日から、年を探索する

イントロダクション

時間が経ってから見ることを考慮していない書類やチラシなどでは、イベントの日付が月・日・曜日でしか書かれていないことがあります。

そのため、今年の話かと思ったら、実は数年前の出来事だった!ということがおこり得ます。


楽しみにしていたイベントが、実は数年前に終わっていたとなると、その落胆はとても大きいです。

そこで、月・日・曜日から、年を探索するプログラムを JavaScript で書いてみました。


JavaScript:月・日・曜日から、年を探索する


ソースコード

<div id="local_result"></div>
<script type="text/javascript">
<!--
    (function () {

        // 月・日・曜日がわかっているときに、
        // 年を列挙するプログラム

        // 前提条件
        var month = 4;          // 月(1 - 12)
        var day = 6;            // 日(1 - 31)
        var week_index = 0;     // 曜日(0 - 6)
        // 0:日曜日、1:月曜日、2:火曜日、3:水曜日、4:木曜日、5:金曜日、6:土曜日


        // 探索範囲
        var start_year = 2000;
        var end_year = 2020;


        // 出力先
        var obj = document.getElementById("local_result");

        obj.appendChild(document.createTextNode("探索を開始します"));
        obj.appendChild(document.createElement("br"));


        // 曜日の一致する年を探索する
        for (var i = start_year; i <= end_year; i++) {

            var date = new Date(i, month - 1, day);

            if (date.getDay() === week_index) {
                obj.appendChild(document.createTextNode(i + " 年 - " + date.toDateString()));
                obj.appendChild(document.createElement("br"));
            }
        }


        obj.appendChild(document.createTextNode("探索は終了しました"));
        obj.appendChild(document.createElement("br"));

    })();

//-->
</script>


実行結果


解説

このプログラムでは、前提条件として、4月6日・日曜日 が、何年なのか 2000年から2020年の間で探索しています。

その設定を次の記述で行っています。

        var month = 4;          // 月(1 - 12)
        var day = 6;            // 日(1 - 31)
        var week_index = 0;     // 曜日(0 - 6)
        // 0:日曜日、1:月曜日、2:火曜日、3:水曜日、4:木曜日、5:金曜日、6:土曜日

        // 探索範囲
        var start_year = 2000;
        var end_year = 2020;


そして、次の繰り返し文により、月・日を固定としたときの、年を 1 つずつ増やしていったときの曜日を Date オブジェクトによって計算しています。

        // 曜日の一致する年を探索する
        for (var i = start_year; i <= end_year; i++) {

            var date = new Date(i, month - 1, day);

            if (date.getDay() === week_index) {
                obj.appendChild(document.createTextNode(i + " 年 - " + date.toDateString()));
                obj.appendChild(document.createElement("br"));
            }
        }


年を仮定して計算した曜日が、指定された曜日と一致したものを列挙します。


Date オブジェクトの仕様については、以下のページが参考になります。



なお、上記プログラムは簡単にしかチェックしていませんので、実際に使用される場合には、慎重にテストをされることをお勧めします。


まとめ

このように、プログラムを使用すれば、月・日・曜日から、年を計算することが可能になります。


なお、この月・日・曜日から、西暦を求める計算は、2008 年頃の人力検索はてなで質問があがっており、様々な手段が回答されています。

日付と曜日から、その日付が西暦何年かを調べたいです。 たとえ… - 人力検索はてな
http://q.hatena.ne.jp/1209519753


便利な Web サービスや Web サイト、各種プログラムによる算出、計算式による算出など様々な手段が回答されているので、気になる方は是非チェックしてみてください。








関連記事

関連記事を読み込み中...

同じラベルの記事を読み込み中...