LoginSignup
1
1

More than 1 year has passed since last update.

day.jsで第何週か求める

Last updated at Posted at 2023-01-21

公式ドキュメントなどを漁ったが、ある日付の週の始まりや終わりの日付などは取得できても、シンプルに「2022/5/22は5月の第何週か?」を求められるメソッドがなさそうなので自前で実装。

結論

以下の式でできる。

const week = (dayjsObject.date() + dayjsObject.startOf("month").day() + 6) / 7

一応式の解説

Day.jsは以下のdayメソッドで曜日を求めることができ、対応表は下記の通り

曜日
0
1
2
3
4
5
6

その月の1日が日曜の場合

例えばこういう時

第1週 1 2 3 4 5 6 7
第2週 8 9 10 11 12 13 14

これは簡単で7で割った商に1を足せば求められる

<(日付-1)/7 の商> + 1
# 7日なら (7-1)/7 + 1 = 0 + 1 = 1
# 9日なら (9-1)/7 + 1 = 1 + 1 = 2

その月の1日が日曜以外の場合

例えば火曜始まりだとこういう時

第1週 1 2 3 4 5
第2週 6 7 8 9 10 11 12

これはこの月の1日の曜日day()の値を足してあげれば日曜始まりと同じように計算できる。
この例だと1日は火曜(day()=2)なので、2を全ての月に足せば1日始まりと同じになる

第1週 +2 +2 1+2 2+2 3+2 4+2 5+2
第2週 6+2 7+2 8+2 9+2 10+2 11+2 12+2

結果これと一緒 ↓ 

第1週 1 2 3 4 5 6 7
第2週 8 9 10 11 12 13 14

つまり(その月の1日のdayの値)を足せば日曜始まりと同じように計算できる

<(日付-1+(その月の1日のdayの値))/7 の商> + 1

よって、全ての月でこれで計算可能

(dayjsObject.date() - 1 + dayjsObject.startOf("month").day()) / 7 + 1

(dayjsObject.date() + dayjsObject.startOf("month").day() + 6) / 7

感想

探したけど意外となかったので自前で実装しましたが、実は普通にday.jsの機能でありそう。
もしくはもっと簡単に求められるかもしれません。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1