日本語 · English

4-4-5 会計暦とは——4-5-4・5-4-4 の変種、第 53 週の扱い、2026 年の期間表

4-4-5 会計暦は、1 年を 13 週の四半期 4 つに分け、各四半期を 4 週・4 週・5 週の 3 期に割る 会計暦(合計 52 週=364 日)。どの期も同じ曜日で終わるので期どうしの週数と週末の数が揃い、前年 同期比が素直に取れる——小売・外食・製造の報告暦として使われる。変種の 4-5-4(米国小売の NRF 暦)と 5-4-4 は、5 週の期の位置が違うだけ。52 週は 364 日なので 5〜6 年に一度第 53 週を 足す必要があり、「どの期が第 53 週を吸収するか」が実装ごとに割れてきた所。

本ページは (1) 2026 年の期間表 → (2) その表を出した定義、の順。表は定義(Kairos の式)の出力 そのもので、リファレンス実装が実行検証している。

2026 年の期間表(ISO 週基準・第 53 週を含む年)

期 始点(月曜) 終点(日曜) 週数 ISO 週
P1 2025-12-29 2026-01-25 4 W01–W04
P2 2026-01-26 2026-02-22 4 W05–W08
P3 2026-02-23 2026-03-29 5 W09–W13
P4 2026-03-30 2026-04-26 4 W14–W17
P5 2026-04-27 2026-05-24 4 W18–W21
P6 2026-05-25 2026-06-28 5 W22–W26
P7 2026-06-29 2026-07-26 4 W27–W30
P8 2026-07-27 2026-08-23 4 W31–W34
P9 2026-08-24 2026-09-27 5 W35–W39
P10 2026-09-28 2026-10-25 4 W40–W43
P11 2026-10-26 2026-11-22 4 W44–W47
P12 2026-11-23 2027-01-03 6 W48–W53

既存側で何が起きるか

Kairos で書く——繰上げ規則は定義の形から出る

期の頭=「ISO 週番号 1, 5, 9, 14, …, 48 の月曜」をマーカー列にし、segmentBy で期を張る。 標準 premise の ISOWeek から派生させるだけ。例の premise US445 は米国東部時間(暦は日付 だけなので tz は結果を変えない——Playground の表示 tz と揃えてある)。週は ISO 週(月曜始まり) なので wkst: Mon:

# eval: 2025-12-01..2027-03-01 tz: America/New_York
premise R445 = ISOWeek with {
  periodStart = isoWeekStart |> filter(d =>
    ((isoWeekNo(d) - 1) mod 13 == 0 or (isoWeekNo(d) - 1) mod 13 == 4 or (isoWeekNo(d) - 1) mod 13 == 8)
    and isoWeekNo(d) <= 48)
  period = day |> segmentBy(periodStart, edges: clip, empties: error)
}
premise US445 { calendar-system: R445; tz: "America/New_York"; wkst: Mon }

@US445
everyDay |> within(period) |> first
#=> 2025-12-29 2026-01-26 2026-02-23 2026-03-30 2026-04-27 2026-05-25
#=> 2026-06-29 2026-07-27 2026-08-24 2026-09-28 2026-10-26 2026-11-23
#=> 2027-01-04 2027-02-01

ISO 2026 年は 53 週年——最終期 P12 が 11/23 から 2027-01-03 までの 6 週に自動で伸び (W49〜W53 を吸収)、翌年は W01(2027-01-04)から正常に再開している。繰上げ規則 (NRF 流の「最終期に足す」)を一行も書いていないのに、「期の頭は W48 まで」という定義の 形から帰結として出る——規則を列挙するのではなく、暦の構造を定義した結果として正しい端が出る。

期末(上の表の「終点」列)も同じ定義から出る:

# eval: 2025-12-29..2027-01-04 tz: America/New_York
premise R445 = ISOWeek with {
  periodStart = isoWeekStart |> filter(d =>
    ((isoWeekNo(d) - 1) mod 13 == 0 or (isoWeekNo(d) - 1) mod 13 == 4 or (isoWeekNo(d) - 1) mod 13 == 8)
    and isoWeekNo(d) <= 48)
  period = day |> segmentBy(periodStart, edges: clip, empties: error)
}
premise US445 { calendar-system: R445; tz: "America/New_York"; wkst: Mon }

@US445
everyDay |> within(period) |> last
#=> 2026-01-25 2026-02-22 2026-03-29 2026-04-26 2026-05-24 2026-06-28
#=> 2026-07-26 2026-08-23 2026-09-27 2026-10-25 2026-11-22 2027-01-03

期ができれば「期末の 3 営業日前」も「期の第 1 営業日」も、グレゴリオ暦の月とまったく同じ 語彙(within(period)・roll・shift)で書ける。

ブラウザで試す

Playground で実行(期の始点)・ 期の終点 ——mod 13 == 0/4/8 を変えれば 4-5-4・5-4-4 の変種になる。

関連