エンジニアをリングする

プログラをミングしたり。

my web site twitter

JavascriptのDateで指定期間の年月(yyyymm)をひとつずつ取得

たとえば、2013年12月から2014年2月までの期間だと、
[201312,201401,201402]
って感じで配列で取得したい!

startとendはDateオブジェクトの想定ですが日にちが何日かわからないので、その月の初日にセットするため再度newしてます。

var format_ym = function(start, end){
    var i = new Date(start.getFullYear(), start.getMonth(), 1, 0, 0, 0);
    var end_time = new Date(end.getFullYear(), end.getMonth(), 1, 0, 0, 0).getTime();
    var ym_format = function(d){ 
        return d.getFullYear()+((('0'+(d.getMonth()+1)).slice(-2)));
    };
    var ym_array = [];

    for(; i.getTime() <= end_time; i = new Date(i.getFullYear(), i.getMonth()+1, 1, 0, 0, 0)){ 
        ym_array.push(ym_format(i));
    }
    return ym_array;
};

forでiをDateオブジェクトにして回せるかなっと思ったら回せました。

ただ毎回newしてるのでパフォーマンスは悪いと思いますね・・・
期間が長くなるときはおすすめしません。
私の場合は期間が最大3ヶ月だったのでこれでやっちゃいました。
もっとスマートなやり方あったら教えてください。

PHPのdate関数が恋しくなりました。