end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転しました

perlのDateCalcの一部をjavascriptで実装し、簡単、日付計算

javascriptで日付を扱う場合、Dateクラスがありますが、普段、perlのDateCalcを使い慣れている私の場合、Dateクラスでは、スラスラ書けません。
そこで、DateCalcで私がよく利用する関数をjavascriptで実装してみました。

// http://search.cpan.org/dist/Date-Calc/
var DateCalc = {
    leap_year : function(year){ //閏年チェック
        if ( year % 400 == 0 )  return true;
        if ( year % 100 == 0 )  return false;
        if ( year % 4 == 0 )    return true;
        return false;
    },

    check_date : function(year,month,day){ //日付の妥当性
        var date = new Date(year, month - 1, day);
        if(date == null ||
           date.getFullYear() != year ||
           date.getMonth() + 1 != month ||
           date.getDate() != day) {
            return false;
        }
        return true;
    },
    
    Days_in_Month : function(year,month){ //月末の日付
        var date = new Date(year, month, 0); //day=0は前月末日を表します
        return date.getDate();
    },
    Delta_Days : function(year1,month1,day1,year2,month2,day2){ //日付の差
        var date1 = new Date(year1, month1 - 1, day1);
        var date2 = new Date(year2, month2 - 1, day2);
        //sec * min * hour * day = 1000 * 60 * 60 * 24 = 86400000 
        return  (date1 - date2) / 86400000;
    },
    Add_Delta_Days : function(year,month,day, Dd){ //??日後の日付
        var date = new Date(year, month-1, day+Dd);
        return [date.getFullYear(), date.getMonth() + 1, date.getDate()];
    },
    Today_and_Now : function(){
        var date = new Date();
        return [date.getFullYear(), date.getMonth() + 1, date.getDate(),
                date.getHours(), date.getMinutes(), date.getSeconds()];
    },
    Today : function(){
        var date = new Date();
        return [date.getFullYear(), date.getMonth() + 1, date.getDate()];
    },
    Now : function(){
        var date = new Date();
        return [date.getHours(), date.getMinutes(), date.getSeconds()];
    }
};

「 DateCalc.Add_Delta_Days(2012,1,1,3) 」のようにstatic methodを呼ぶように使います。
参考にさせて頂いたurl -> http://www.hoge256.net/2007/08/64.html