カレンダーのシステムを作ってるなかで、こういう問題に直面しました。
例えば2019-01-01のみの終日イベントの場合
start: 2019-01-01
end: 2019-01-01
データの保存の仕方はこうなるとおもいます。
同じように2019-01-01 09:00:00から2019-01-01 12:00:00までの時間指定のあるイベントがあったとします。
start: 2019-01-01 09:00:00
end: 2019-01-01 12:00:00
ここまでは、とても自然な登録方法だと思います。
ここで問題。
上記2つの場合のデータの保存カラムが同じの場合は、終日イベントでも時間の指定が必要です。
なので、先程の2019-01-01のみの終日イベントの場合
start: 2019-01-01 00:00:00
end: 2019-01-01 23:59:59 ←一日が終わる1秒前
と、思ったんですよ。
しかしながら、グローバルスタンダードは下記。
start: 2019-01-01 00:00:00
end: 2019-01-02 00:00:00 ←翌日の0時ちょうど
こう書かないと人間は理解できてもプログラムは理解できないため、これを回避するための余計なコードが増えるんだそうな。。。
参考:Event object utils for getting/setting an event’s inclusive end date