計算方法と根拠

通知日の求め方

有効期限の日付を、1970年1月1日からの通し日数に直し、通知までの日数を引いて、また年月日に戻します。うるう年や月・年またぎも暦どおりに数えます。

実在しない日付

2月30日のように実在しない日付を入れると、計算を止めてお知らせします。

計算例

有効期限が2027年3月31日で、30日前なら2027年3月1日、90日前なら2026年12月31日です。

使っている式

計算式
名前やっていること式
月が1〜2月か(1=はい)日付を通し日数に直す計算で、1・2月を前年の続きとして扱うための判定です。sa = if(em <= 2, 1, 0)
調整した年1・2月は前年として数えた年です。sy = ey - sa
400年周期の番号グレゴリオ暦は400年で同じ並びに戻ります。se = floor(sy / 400)
400年周期内の年調整した年から400年周期の分を引いた値です。so = sy - se * 400
3月起点の月3月を0、翌年2月を11とした月の番号です。sm = if(em > 2, em - 3, em + 9)
3月1日からの日数3月1日を0とした、その年の中の日数です。sd = floor((153 * sm + 2) / 5) + ed - 1
400年周期内の通し日数うるう年を数えながら通し日数にします。sdo = so * 365 + floor(so / 4) - floor(so / 100) + sd
有効期限の通し日数(1970-01-01=0)1970年1月1日を0とした有効期限の通し日数です。ser = se * 146097 + sdo - 719468
有効期限の戻し確認(z0)通し日数を日付に戻して、入力が実在する日付か確かめる途中計算です。z0 = ser
有効期限の戻し確認(zp0)通し日数を日付に戻して、入力が実在する日付か確かめる途中計算です。zp0 = z0 + 719468
有効期限の戻し確認(er0)通し日数を日付に戻して、入力が実在する日付か確かめる途中計算です。er0 = floor(zp0 / 146097)
有効期限の戻し確認(de0)通し日数を日付に戻して、入力が実在する日付か確かめる途中計算です。de0 = zp0 - er0 * 146097
有効期限の戻し確認(ye0)通し日数を日付に戻して、入力が実在する日付か確かめる途中計算です。ye0 = floor((de0 - floor(de0 / 1460) + floor(de0 / 36524) - floor(de0 / 146096)) / 365)
有効期限の戻し確認(dy0)通し日数を日付に戻して、入力が実在する日付か確かめる途中計算です。dy0 = de0 - (365 * ye0 + floor(ye0 / 4) - floor(ye0 / 100))
有効期限の戻し確認(q0)通し日数を日付に戻して、入力が実在する日付か確かめる途中計算です。q0 = floor((5 * dy0 + 2) / 153)
有効期限の戻し確認(day0)通し日数を日付に戻して、入力が実在する日付か確かめる途中計算です。day0 = dy0 - floor((153 * q0 + 2) / 5) + 1
有効期限の戻し確認(mon0)通し日数を日付に戻して、入力が実在する日付か確かめる途中計算です。mon0 = if(q0 < 10, q0 + 3, q0 - 9)
有効期限の戻し確認(yr0)通し日数を日付に戻して、入力が実在する日付か確かめる途中計算です。yr0 = ye0 + er0 * 400 + if(mon0 <= 2, 1, 0)
入力した日付が実在するか(1=実在)通し日数から日付に戻した結果が入力と同じなら実在する日付です。valid = if(yr0 == ey && mon0 == em && day0 == ed, 1, 0)
入力した日付が実在するか(実在しない日付は計算できません)2月30日のように実在しない日付だと計算を止めます。guard = 1 / valid
1回目の通知日の途中計算(z1)有効期限から1回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。z1 = ser - l1
1回目の通知日の途中計算(zp1)有効期限から1回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。zp1 = z1 + 719468
1回目の通知日の途中計算(er1)有効期限から1回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。er1 = floor(zp1 / 146097)
1回目の通知日の途中計算(de1)有効期限から1回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。de1 = zp1 - er1 * 146097
1回目の通知日の途中計算(ye1)有効期限から1回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。ye1 = floor((de1 - floor(de1 / 1460) + floor(de1 / 36524) - floor(de1 / 146096)) / 365)
1回目の通知日の途中計算(dy1)有効期限から1回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。dy1 = de1 - (365 * ye1 + floor(ye1 / 4) - floor(ye1 / 100))
1回目の通知日の途中計算(q1)有効期限から1回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。q1 = floor((5 * dy1 + 2) / 153)
1回目の通知日の途中計算(day1)有効期限から1回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。day1 = dy1 - floor((153 * q1 + 2) / 5) + 1
1回目の通知日の途中計算(mon1)有効期限から1回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。mon1 = if(q1 < 10, q1 + 3, q1 - 9)
1回目の通知日の途中計算(yr1)有効期限から1回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。yr1 = ye1 + er1 * 400 + if(mon1 <= 2, 1, 0)
2回目の通知日の途中計算(z2)有効期限から2回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。z2 = ser - l2
2回目の通知日の途中計算(zp2)有効期限から2回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。zp2 = z2 + 719468
2回目の通知日の途中計算(er2)有効期限から2回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。er2 = floor(zp2 / 146097)
2回目の通知日の途中計算(de2)有効期限から2回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。de2 = zp2 - er2 * 146097
2回目の通知日の途中計算(ye2)有効期限から2回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。ye2 = floor((de2 - floor(de2 / 1460) + floor(de2 / 36524) - floor(de2 / 146096)) / 365)
2回目の通知日の途中計算(dy2)有効期限から2回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。dy2 = de2 - (365 * ye2 + floor(ye2 / 4) - floor(ye2 / 100))
2回目の通知日の途中計算(q2)有効期限から2回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。q2 = floor((5 * dy2 + 2) / 153)
2回目の通知日の途中計算(day2)有効期限から2回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。day2 = dy2 - floor((153 * q2 + 2) / 5) + 1
2回目の通知日の途中計算(mon2)有効期限から2回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。mon2 = if(q2 < 10, q2 + 3, q2 - 9)
2回目の通知日の途中計算(yr2)有効期限から2回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。yr2 = ye2 + er2 * 400 + if(mon2 <= 2, 1, 0)
3回目の通知日の途中計算(z3)有効期限から3回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。z3 = ser - l3
3回目の通知日の途中計算(zp3)有効期限から3回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。zp3 = z3 + 719468
3回目の通知日の途中計算(er3)有効期限から3回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。er3 = floor(zp3 / 146097)
3回目の通知日の途中計算(de3)有効期限から3回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。de3 = zp3 - er3 * 146097
3回目の通知日の途中計算(ye3)有効期限から3回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。ye3 = floor((de3 - floor(de3 / 1460) + floor(de3 / 36524) - floor(de3 / 146096)) / 365)
3回目の通知日の途中計算(dy3)有効期限から3回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。dy3 = de3 - (365 * ye3 + floor(ye3 / 4) - floor(ye3 / 100))
3回目の通知日の途中計算(q3)有効期限から3回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。q3 = floor((5 * dy3 + 2) / 153)
3回目の通知日の途中計算(day3)有効期限から3回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。day3 = dy3 - floor((153 * q3 + 2) / 5) + 1
3回目の通知日の途中計算(mon3)有効期限から3回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。mon3 = if(q3 < 10, q3 + 3, q3 - 9)
3回目の通知日の途中計算(yr3)有効期限から3回目の通知の日数を引いた通し日数を、年月日に戻す途中計算です。yr3 = ye3 + er3 * 400 + if(mon3 <= 2, 1, 0)
1回目の通知日の年(結果)有効期限日からN日さかのぼった日の年です。yr1
1回目の通知日の月(結果)通知日の月です。mon1
1回目の通知日の日(結果)通知日の日です。day1
2回目の通知日の年(結果)有効期限日からN日さかのぼった日の年です。yr2
2回目の通知日の月(結果)通知日の月です。mon2
2回目の通知日の日(結果)通知日の日です。day2
3回目の通知日の年(結果)有効期限日からN日さかのぼった日の年です。yr3
3回目の通知日の月(結果)通知日の月です。mon3
3回目の通知日の日(結果)通知日の日です。day3

式の記法: + - * / ^(べき乗)、かっこ、min / max / round / ceil / floor / pow / abs / sqrt、if(条件, 真のとき, 偽のとき)。round(x, 桁) は四捨五入、ceil は切り上げ、floor は切り捨てです。

設定値(定数)と出典

この計算では、税率や料金表などの外部の設定値は使っていません。数学的な定義の式だけで計算しています。

入力できる範囲

入力項目
項目範囲初期値
有効期限の年2,000〜2,100年2,027年
有効期限の月1〜12月3月
有効期限の日1〜31日31日
1回目の通知(期限の何日前)0〜1,000日前90日前
2回目の通知(期限の何日前)0〜1,000日前30日前
3回目の通知(期限の何日前)0〜1,000日前14日前

結果は、同じ条件なら本サイトのどのページでも同じ数字になります(ページの数字も、計算ツールも同じ計算の仕組みで出しています)。

ご利用にあたって

  • 日付の足し引きだけを行います。証明書の有効期間の上限、更新に必要な日数、休日や営業日は考慮していません。
  • 通知までの日数は入力した値で、推奨値ではありません。実際の運用では、認証局や社内の手順を確認してください。