Miobiki

  1. HOME
  2. moment.js
  3. Moment.jsを使って投稿日時から何年何月の何週目か求める

Moment.jsを使って投稿日時から何年何月の何週目か求める

目次

ブログのRSSから週間ごとの投稿数を取得してグラフにしようと考えました。
githubのcontributions graphからインスパイアされてます。

そこでキモとなるのが投稿日時から何年何月の何週目かを取得する方法です。
ググってみましたが、チンプンカンプンで理解できる脳みそがなかったので、Moment.jsを頼ります。

実装

こちらのサイトの表のような期間で集計します。
月曜始まり日曜終わりは同じですが、1月1日のある週を年の始まり週とします。
今年2019年でいうと、1週目の始まりは2018年12月31日月曜日です。

投稿日から週の終わりまで日付を進めるendOf('week')
週の終わりの日付をクローンして月の始まりにするstartOf('month')
その2つの週の差分を利用して月の何周目になるかという実装です。

週の終わりまで日付を進めることで、2018年12月31日月曜日の記事を2019年1月1週目に含めることができます。
カレンダーを見ながらこうしたら簡単そうだなと思った実装なので、見落としがあるかもしれません。
なにかありましたらコメントいただけると助かります。

年間の週番号なら簡単

weekisoWeekを利用すれば年間の週番号は一発で取得できます。
今回は月の週番号を年間の週番号から判定するのは難しいと思ったのでdiffを利用しています。

まとめ

どうしていいか分からなかった計算をMoment.jsのメソッドを利用することで、簡単に実装することができました。
特にメソッドが充実している点が素晴らしいと思います。
複雑な日付計算の場合に重宝しそうです。