月の第何週

月の週

[1] 月を週に分けて考えるとき、最初から順に第1週、第2週と数えていきます。

[2] 週初について日曜日、土曜日など様々な考え方があるため、 月の週の表す対象にもばらつきがあります。

[3] 更に週初と月初は一般に異なるので、これをどう処理するかも問題となってきます。

[91] 前後の月に含まれる日はその週に含むとは言わないことが多いので、 その場合週は7日未満となります。

[92] 前月の第5週が翌月の第1週になるなど、月の最後と最初の週が同じ週を指すことがよくあります。

[4] 普通、こうした違いが問題となる厳密な指定が必要な場面では使われないか、 明確な定義を与えて利用されることとなります。

週の数

[8] グレゴリオ暦の月は、4つか5つの週を含むことになります。

[9] 閏年以外 (平年) の2月はちょうど28日なので、 週初と月初が重なる場合、ちょうど4週となります。

[14] それ以外の月は5週または6週となります。 第1週と最終週の一方または両方は7日に満たない (前後の月にまたがる) こととなります。

計算

[13] ある月 m の d 日が属する週 n は、 次のようにして求めることができます。

  1. [15] wd を、 d の曜日に設定します。 ここで、曜日とは週の最初の日なら 0、 最後の日なら 6 となる整数とします。
  2. [16] n = ⌊ 12 + d - wd7 ⌋ を返します。

[17] なぜなら、

  1. [18] fwd を、m 月 1 日の曜日に設定します。
  2. [19] すると m 月第1週には 1 日よりも前に fwd 個の日が (m - 1 月に) 存在することとなります。
  3. [20] 第 n 週には d よりも後に 7 - (wd + 1) = 6 - wd 個の日が存在します。
  4. [21] m 月の第1週から第 n 週までに含まれる日の合計数は、

    7 n = fwd + d + (6 - wd)

    と表せます。
  5. [22] ここで、 0 ≦ fwd ≦ 6 ですから、

    0 + d + (6 - wd) ≦ 7 n ≦ 6 + d + (6 - wd)

    となります。
  6. [23]

    d - wd + 12 - 6 ≦ 7 n ≦ d - wd + 12

  7. [24]

    d - wd + 12 7 - 1 < d - wd + 12 7 - 67 ≦ n ≦ d - wd + 12 7

  8. [25]

    n = ⌊ d - wd + 127 ⌋

[26] 逆に、 m 月の第 n 週の wd 曜日の日 d は、 次のように求められます。

  1. [28] fwd を、m 月 1 日の曜日に設定します。
  2. [27] d = - fwd + 7 n + wd - 6

[29] これは >>21 を移項したものです。

LDML における月の週

LDML/CLDR週

年の週と月の週

[31] 常識的な感覚によれば、最初の年の週は年の最初の月の月の週となり、 最後の年の週は年の最後の月の月の週となっていることが期待されます。

[32] LDML/CLDR週はそれを暗黙の前提としています。

関連

[5] 第何何曜日とは似て非なるものです。

メモ

[6] No.680 第何何曜日って?: こんぶブログ~気ままな雑記帳 (2018年1月25日 (木) ) http://kombu-blog.cocolog-nifty.com/zakki/2018/01/no680-3233.html

○週目という表記はその年の第何週目という意味でこれも国際規格(ISO8601)で定められているので、今月の第2週目などいう表現は本来間違っている。

... と主張する人もいますが、根拠が示されていません。この Webページとほとんど同じ (おそらくパクリ元の) Webページがあり、そこには

[7] 第何週第何曜日という数え方について () http://week2017.xyz/you/reference.html

国際的な日付に関する規格(ISO8601)においては「その年の第何週」という規格はあるものの「その月の第何週」という規格は存在しません。そのため、ここでも月の週については誤解を招くため「第何週」という表現はしていません。

... と書かれています。この元々の Webページは、定義がないので自身は採用しないと述べているだけで、 その正誤には言及していません。デマ記事の方はこれを曲解して「間違っている」などと断定したのでしょう。

[10] 指定した日付が、その月の第何週かを求める方法 -月曜から日曜の作業内- Visual Basic(VBA) | 教えて!goo () https://oshiete.goo.ne.jp/qa/393196.html

[11] JavaScript で週の計算 - Movable Type技術ブログ () http://www.mtcms.jp/movabletype-blog/tech/200903162111.html

[12] Perlでその日が月の第何週に存在しているかを計算する関数を書いてみました - 知らないことがあってもへっちゃらさ () http://blog.mukairiku.net/2010/09/perl%E3%81%A7%E3%81%9D%E3%81%AE%E6%97%A5%E3%81%8C%E6%9C%88%E3%81%AE%E7%AC%AC%E4%BD%95%E9%80%B1%E3%81%AB%E5%AD%98%E5%9C%A8%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E3%82%92%E8%A8%88%E7%AE%97%E3%81%99%E3%82%8B%E9%96%A2%E6%95%B0%E3%82%92%E6%9B%B8%E3%81%84%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%97%E3%81%9F.html

[30] 公開メモ日記 - ある日付がその月の第何週目かを判定する方法 (2007-02-24 02:17:08 +09:00 版) http://knoa.jp/memo/?id=2007-02-23+12:25 ()