この記事はおさむん家アドベントカレンダー2049、1631日目の記事です。
おさむん家アドベントカレンダー2049は2014年12月8日からスタートしました。開始日を「1日目」とし2、3、4と増えていきます。0日目はありません。
(例えば「どうなる?イオンモール農猫開業は9年後の8月」は、2014年12月8日を1日目として7日目の記事です)
この「○日目」を、今後「おさむん家アドベントカレンダー日 (Osamu's-House Advent Calendar Day Number, OAC Day Number)」と呼びます。
OAC Day Numberは性質上、アドベント記事の一意な識別子として機能します(「○日目」に複数の記事が紐づくことはない)。
OAC Day Numberは日本標準時2014年12月8日0時0分0秒(協定世界時2014年12月7日15時0分0秒)を紀元とします。
2014-12-08T00:00:00+09:00 日本標準時
2014-12-07T15:00:00+00:00 協定世界時
紀元から日付が変わるまでを「1日目」とします。以降「2日目」「3日目」と数え上げることとします。
期間
2014-12-08T00:00:00+09:00/2014-12-09T00:00:00+09:00 1日目
2014-12-09T00:00:00+09:00/2014-12-10T00:00:00+09:00 2日目
2014-12-10T00:00:00+09:00/2014-12-11T00:00:00+09:00 3日目
境界値
2014-12-08T23:59:59+09:00 1日目
2014-12-09T00:00:00+09:00 2日目
2014-12-09T00:00:01+09:00 2日目
小数点などをつけて時刻を表してはいけません。OAC Day Numberは常に整数であるべきです。
1635 OK
1635.5 NG
1635.43200 NG
理由: 正午は .5
それとも .43200
?
紀元前の日時をOAC Day Numberで表現してはいけません。
理由: 2014年12月7日は 0日目
それとも -1日目
?
const EPOCH = new Date("2014-12-08T00:00:00+09:00");
const DAY_NUMBER_BASE = 1;
export const oacDayNumber = (given: Date): number =>
DAY_NUMBER_BASE + Math.floor((given.getTime() - EPOCH.getTime()) / 86400000);
oacDayNumber(new Date("2014-12-08")); // 紀元: 1日目
oacDayNumber(new Date("2019-05-26")); // 今日: 1631日目
oacDayNumber(new Date("2022-04-01")); // コミュニティ開設から10年: 2672日目
oacDayNumber(new Date("2049-12-25")); // アドベントカレンダー終了日: 12802日目
1989-09-30T00:00:00+09:00
を0
とするosamu time
2012-04-01T00:00:00+09:00
を0
とするosamu's house time
などを定義しようかと思いましたが、主体暦(金日成の誕生年を紀元とする紀年法)みたいでやめました。