ckazu.dev

本当に 6/30 で今年の半分が終わったのだろうか


とつぶやいたものの、日数で見たらちょうど真ん中というわけでもなかろう、ということで数えてみた。

6/1 が 1/1 から数えて何日目かというのはちょっとめんどい。

西向く士

ような気もしたけど、実際は数字を 6 つ足せばよいだけなのでそんなに面倒なこともなかった。

にしむくさむらい なので、2 月が 28 日、4, 6 月が 30 日で、残りの 1, 3, 5 月が 31 日。

自分なら、30 * 6 + 1 = 181 日と計算する。

すると、365 - 181 = 184 なので、真ん中からはちょいずれる。

ここで、一日を後半から前半に融通すると

  • 1月1日から7月1日までが182日
  • 7月3日から12月31日までが182日
  • となるので、7月2日が真ん中になる計算だ。

    つまり、うるう年ではない年は、7月2日の正午が真ん中の瞬間になる。

    うるう年は、7月2日深夜0時(7月1日24時)が真ん中。

    念の為確認してみる。

    new Date(+new Date("2022-01-01T00:00:00") + (+new Date("2023-01-01T00:00:00") - +new Date("2022-01-01T00:00:00")) / 2).toLocaleString()
    > '2022/7/2 12:00:00'

    無事、7/2 の正午になった

    うるう年も確認してみよう。

    new Date(+new Date("2000-01-01T00:00:00") + (+new Date("2001-01-01T00:00:00") - +new Date("2000-01-01T00:00:00")) / 2).toLocaleString()
    > '2000/7/2 0:00:00'

    こちらもきちんと 7月2日の深夜0時となった。

    さて、うるう年で一日増えているのに、真ん中が 12 時間早くなるのは直感と合っているだろうか?

    7月2日正午が一年の真ん中の時間ですが、では、うるう年の場合の真ん中は何月何日何時何分?」とクイズを出されたりなんかすると、きっと「1 日の半分の 12 時間を足して、答えは 7月3日0時ちょうど」と答えてしまいそうだ。

    これは、基礎的な算数の計算で身についていて、3 の半分は 1.5 で、一つ増やした 4 の半分は 2 になるとすぐに分かるからだ。

    我々は0時でその日の日付が変わるような使い方をしているのでややこしいが、7月2日12時というのが 7月1日24時に12時間を足したものであると考えるとわかりやすいかもしれない。

    一応、検算してみると正しいことがわかる。

    前後半を 183 日で分割できる。

    (+new Date("2001-01-01T00:00:00") - +new Date("2000-01-01T00:00:00")) / 2 / 1000 / 60 / 60 / 24
    > 183
    (+new Date("2000-07-02T00:00:00") - +new Date("2000-01-01T00:00:00")) / 1000 / 60 / 60 / 24
    > 183
    (+new Date("2001-01-01T00:00:00") - +new Date("2000-07-02T00:00:00")) / 1000 / 60 / 60 / 24
    > 183

    蛇足

    ついでに、完全に蛇足ではあるけども、スプレッドシートに日付を並べて愚直にグラフにしてみた。


    ← Go home