読者です 読者をやめる 読者になる 読者になる

ltdblog

ギークハウス元住吉やってます

JavaScriptでISO 8601形式の週番号を取得する

PHPでは週番号が簡単に取得できます。

PHP: date - Manual
http://www.php.net/manual/ja/function.date.php

JavaScriptではそうはいかないようなので、PHPにあわせてISO 8601形式の週番号を取得するコードを自分なりに書いてみました。

ISO 8601では週番号は以下の様な条件なのでそれに合うように書いてみます。

  • 1週間は月曜日から日曜日
  • 最初の木曜日を含む週がその年の1週目
// 現在日時
var now = new Date();

// 今年の1月1日
// 引数2は0が1月
var oneJan = new Date(now.getFullYear(), 0, 1);

// 今日が1月1日から何日経過したか(何日目かではない)
// 1日は86400000ミリ秒
var day = Math.ceil((now - oneJan) / 86400000);

// 1月1日が何曜日か
// getDayは日曜が0土曜が6
var offset = oneJan.getDay() - 1;

// 最初の月曜日に足らない曜日分を足すと月曜日は常に7で割り切れる
// 月曜日以外は小数点以下切り捨て
// 1週目が0になってしまうので最後に+1
var week = Math.floor((day + offset) / 7) + 1;

// 1月1日が金土日だったら週番号を-1
if (offset >= 5)
    week = week - 1;

これでweekに週番号が入ります。年始が週番号1にならない2011年で確認したので合ってるはず……。

広告を非表示にする