秋分の日の昼と夜は同じ長さではない 16分の差を自分で計算する

秋分は「昼と夜の長さが同じになる日」と説明されることが多い。実際には同じではない。2026年9月23日の東京は、昼のほうが夜より16〜18分長い。

ずれの理由は天文ではなく定義にある。計算してみると、どこで16分が生まれるかがはっきりする。

2つの定義

太陽の中心が地平線を通る瞬間を日の出・日の入りとするなら、秋分の日の昼と夜はほぼ等しくなる。しかし暦が採用しているのはそれではない。

  • 太陽の上端が地平線にかかった時刻を日の出とする(中心ではない)。太陽の視直径はおよそ0.53度なので、半径ぶんの約0.27度だけ早まる
  • 大気差(大気による屈折で太陽が浮き上がって見える効果)を約0.57度見込む

合わせて、高度 -0.833度 を地平線とみなす。日の出は早くなり、日の入りは遅くなる。両端で効くので、昼が二重に伸びる。

実装

NOAA の太陽位置アルゴリズムの簡易版である。外部ライブラリは使わない。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
"use strict";
const rad = Math.PI / 180, deg = 180 / Math.PI;

function julianDay(y, m, d) {
if (m <= 2) { y -= 1; m += 12; }
const A = Math.floor(y / 100), B = 2 - A + Math.floor(A / 4);
return Math.floor(365.25 * (y + 4716)) + Math.floor(30.6001 * (m + 1)) + d + B - 1524.5;
}

function solar(jd) {
const T = (jd - 2451545) / 36525;
const L0 = (280.46646 + T * (36000.76983 + T * 0.0003032)) % 360;
const M = 357.52911 + T * (35999.05029 - 0.0001537 * T);
const C = Math.sin(M * rad) * (1.914602 - T * (0.004817 + 0.000014 * T))
+ Math.sin(2 * M * rad) * (0.019993 - 0.000101 * T)
+ Math.sin(3 * M * rad) * 0.000289;
const omega = 125.04 - 1934.136 * T;
const lambda = L0 + C - 0.00569 - 0.00478 * Math.sin(omega * rad);
const e0 = 23 + (26 + ((21.448 - T * (46.815 + T * (0.00059 - T * 0.001813)))) / 60) / 60;
const e = e0 + 0.00256 * Math.cos(omega * rad);
const decl = Math.asin(Math.sin(e * rad) * Math.sin(lambda * rad)) * deg;
const y = Math.tan(e / 2 * rad) ** 2;
const eqTime = 4 * deg * (y * Math.sin(2 * L0 * rad)
- 2 * 0.016708634 * Math.sin(M * rad)
+ 4 * 0.016708634 * y * Math.sin(M * rad) * Math.cos(2 * L0 * rad)
- 0.5 * y * y * Math.sin(4 * L0 * rad)
- 1.25 * 0.016708634 ** 2 * Math.sin(2 * M * rad));
return { decl, eqTime };
}

// h0: 地平線とみなす太陽高度(度)。暦の定義は -0.833
function dayLength(y, m, d, lat, lon, tz, h0) {
const jd = julianDay(y, m, d) + (12 - lon / 15 - tz) / 24;
const { decl, eqTime } = solar(jd);
const cosH = (Math.sin(h0 * rad) - Math.sin(lat * rad) * Math.sin(decl * rad))
/ (Math.cos(lat * rad) * Math.cos(decl * rad));
if (cosH > 1 || cosH < -1) return null; // 極夜・白夜
const H = Math.acos(cosH) * deg; // 時角(度)
const noon = 720 - 4 * lon - eqTime + tz * 60;
return { rise: noon - 4 * H, set: noon + 4 * H, minutes: 8 * H };
}

要点は h0 を引数にしてあることである。-0.833 が暦の定義、0 が「太陽の中心・大気差なし」。この2つを並べると、16分がどこから来たかが見える。

実際に試す

前提: Node.js 18 以降。上の関数に続けて次を書き、equinox.js として保存する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function hhmm(min) {
const t = Math.round(min);
return String(Math.floor(t / 60)).padStart(2, "0") + ":" + String(t % 60).padStart(2, "0");
}

const LAT = 35.6895, LON = 139.6917, TZ = 9; // 東京
for (const d of [22, 23, 24, 25, 26]) {
const a = dayLength(2026, 9, d, LAT, LON, TZ, -0.833); // 暦の定義
const b = dayLength(2026, 9, d, LAT, LON, TZ, 0); // 中心・大気差なし
console.log(
`2026-09-${d} 日の出 ${hhmm(a.rise)} 日の入り ${hhmm(a.set)} ` +
`昼 ${hhmm(a.minutes)}${hhmm(1440 - a.minutes)} ` +
`差 ${(a.minutes - (1440 - a.minutes)).toFixed(1)}分 ` +
`[中心・大気差なし: 差 ${(b.minutes - (1440 - b.minutes)).toFixed(1)}分]`
);
}
1
node equinox.js

手元の実行結果は次のとおりだった。

1
2
3
4
5
2026-09-22  日の出 05:29  日の入り 17:4012:1111:4922.1 [中心・大気差なし: 差 5.7分]
2026-09-23 日の出 05:29 日の入り 17:3812:0911:5117.6 [中心・大気差なし: 差 1.2分]
2026-09-24 日の出 05:30 日の入り 17:3712:0711:5313.1 [中心・大気差なし: 差 -3.3分]
2026-09-25 日の出 05:31 日の入り 17:3512:0411:568.7 [中心・大気差なし: 差 -7.7分]
2026-09-26 日の出 05:32 日の入り 17:3412:0211:584.2 [中心・大気差なし: 差 -12.2分]

読み取れることは2つある。

第一に、暦の定義(-0.833度)では9月23日でも昼が17.6分長い。昼夜が等しくなるのは秋分より数日あとになる。

第二に、中心・大気差なし(0度)にすると、9月23日の差は1.2分まで縮む。つまり「秋分は昼夜が等しい」という説明は、太陽を点として扱い大気差を無視した世界でならほぼ正しい。16分の差は天体の運行ではなく、日の出・日の入りの定義が作っている。

実測値と突き合わせる

計算しただけでは合っているか分からない。国立天文台暦計算室の日の出入り@東京 2026年9月と比べる。

日付 本記事の計算 国立天文台
9月22日 05:29 / 17:40 5:29 / 17:39
9月23日 05:29 / 17:38 5:29 / 17:37
9月24日 05:30 / 17:37 5:30 / 17:36
9月25日 05:31 / 17:35 5:31 / 17:34

日の出は一致、日の入りは1分遅い。簡易版アルゴリズムの打ち切り誤差と、観測地点の座標がわずかに違うこと(本記事は北緯35.6895度・東経139.6917度、天文台の表は北緯35.6581度・東経139.7414度)が効いている。用途が「何分ずれるか」であれば十分だが、正式な時刻が要る場合は暦計算室の値を使うこと。1分の差を自前計算で埋めようとしない。

まとめ

  • 秋分の日の昼夜は等しくない。2026年9月23日の東京は昼が16〜18分長い
  • 原因は太陽の上端基準(約0.27度)と大気差(約0.57度)で、合わせて高度 -0.833度を地平線としていること
  • h0 をパラメータにすれば、定義の違いがそのまま数値の違いとして出る
  • 自前計算は1分程度ずれる。突き合わせ先を先に決めてから実装する

秋分の日の昼と夜は同じ長さではない 16分の差を自分で計算する
https://blog.hashito.biz/2026/09/23/equinox-day-and-night-are-not-equal-compute-it/
著者
hashito
作成日
2026年9月23日
著作権