Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

こんにちは。みんなのウェディングのインフラエンジニア横山です。
この記事はくふうカンパニーアドベントカレンダー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
tatsuo48
とあるHamee株式会社でごにょごにょ
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした