概要
週番号(WeekNumber / ウィークナンバー)をご存知でしょうか?
ざっくり「週」に付与されたindexと思って扱ったら、思わぬ落とし穴があったのでご紹介したいと思います。
本文
週番号とは「週」に付けた通し番号のことで(要はindexなのですが…)、1年の始めから終わりまでの週に1から順番に通し番号が付き、年が変わるとまた1から番号が付けられます(ここが大事)。
年が変わるとまた1から付与され直されると先ほど書いたのですが、この付与の仕方は地域によって差があり、その差を理解していないと思わぬところで不具合を出してしまいます。
以下のJavaScriptのdayjsを使ったサンプルをご覧ください。
import dayjs from "dayjs";
dayjs("2022-12-31", "YYYY-MM-DD").week(); // ・・・①53
dayjs("2023-12-31", "YYYY-MM-DD").week(); // ・・・②1
dayjsの場合、week()
で該当日付の週番号を取得できるのですが、上記それぞれでいくつが取得できるか分かりますでしょうか?
1年は52or53週あるのでどちらの場合でも52or53が取得できると思ったのですが、実はこの場合、①は53、②は1となります。
日本の場合、週番号は1月1日が含まれる週が1となります。また、日曜日が週の始まりと定義されているのですが、上記の例の日付で2023-01-01
は日曜日、2024-01-01
は月曜日となっています。すなわち 2022-12-31
は2023-01-01
と週が異なるので週番号は1でないのですが、2023-12-31
は 2024-01-01
と同じ週になるので週番号が1となってしまうわけです。
2022年12月 | 2023年12月 |
---|---|
使う機会があまりなかったので知りませんでしたが、いざ使おうという時に知らないと不具合の温床になるので注意が必要です。
おまけ
補足ですが週番号の付け方は地域によって差異があります。
欧州の場合は1月4日、アメリカや日本等の場合は1月1日が含まれる週が週番号1となります。