LoginSignup
4
1

More than 5 years have passed since last update.

年の変わり目には気をつけよう

Last updated at Posted at 2018-12-25

はじめに

こんにちは。みんなのウェディングのインフラエンジニア横山です。
この記事はくふうカンパニーアドベントカレンダー23日目になります。
今回はDB連携ジョブフローの管理をbricolageからdigdagに移行するにあたり、週番号について考える必要があったのでそこで得た知見を共有します。

週番号

週番号では、その年の初めての週を第1週として、1週ごとに数えていきます。
52週または53週で1年となります。

2020年12月27日は第何週??

この質問の答えは地域によって変わってきます。
例えば米国での数え方だとこれは2021年の第1週となります。

moment.locale('en');
"en"
moment('2020-12-27').weekYear();
2021
moment('2020-12-27').week();
1

逆にフランスでの数え方だと以下のように2020年の52週となります。

moment.locale('fr');
"fr"
moment('2020-12-27').weekYear();
2020
moment('2020-12-27').week();
52

さらにイスラエルなどのヘブライ語圏での数え方だと、2021年の第1週となります。

moment.locale('he');
"he"
moment('2020-12-27').weekYear();
2021
moment('2020-12-27').week();
1

このような違いはその年の第1週をどのようなルールに則って定めているかによって生まれています。
ルールは以下の通りとなります。

米国 フランス イスラエル(ヘブライ語圏)
1月1日が含まれる週を第1週 その年の最初の木曜日が含まれる週を第1週 その年の最初の金曜日が含まれる週

※参考資料 https://www.toishi.info/email/week_calendar_2018.html

地域によってバラバラですね。
このようにバラバラだと国際取引において不都合が多いということでISO8601で標準化されています。
こちらのルールだと、フランスのようにその年の最初の木曜日が含まれる週を第1週としています。

米国 フランス イスラエル(ヘブライ語圏) ISO8601
1月1日が含まれる週を第1週 その年の最初の木曜日が含まれる週を第1週 その年の最初の金曜日が含まれる週 その年の最初の木曜日が含まれる週を第1週

特に理由がなければISO8601に規定された通りその年の最初の木曜日が含まれる週を第1週とするのが良いかと思います。
moment.jsにはisoWeekYearisoWeekがあるのでこれを使うと良さそうです。
以下の通りlocaleが米国でも2020年の52週となります。

moment.locale('en');
"en"
moment('2020-12-27').isoWeekYear();
2020
moment('2020-12-27').isoWeek();
52
4
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
4
1