カウントダウンタイマー
目標日とタイムゾーンを設定すると、パネルが 1 秒ごとに更新され、残りの年、月、日、時、分、秒を表示します。過去の日付からの経過もカウントします。
目標時刻は既定でローカルタイムゾーンの午前 0 時(00:00:00)です。プリセットをクリックすると即座に適用されます。カスタム日付は「目標を設定」をクリックしてください。
このカウントダウンタイマーでできること
未来の日付と時刻を(必要なら別のタイムゾーンで)設定すると、下のパネルが1秒ごとにカウントダウンし、残り時間を年・月・日・時・分・秒で表示します。同じパネルは「経過時間」にも対応しており、目標が過去であれば同じ内訳がその出来事からの経過を数え上げます。目標のUnixタイムスタンプも表示されるので、カレンダーの招待、cronのスケジュール、データベースの行などに貼り付けられます。
クリスマス・元日などの定例イベントまでの日数
日付選択の上にあるプリセットチップは、カウントダウンがよく求められる検索に対応しています。「次のクリスマス」は日付を現在のタイムゾーンの12月25日午前0時に合わせ(今年の分が過ぎていれば翌年)、「次の元日」は1月1日に移動し、「Y2038オーバーフロー」は符号付き32ビットUnixタイムスタンプが巻き戻る瞬間までカウントダウンします。各プリセットは単なる日付の目印なので、適用後に編集して時刻を微調整したりゾーンを変えたりできます。
- クリスマスまでの日数:「次のクリスマス」をクリックします。タイムゾーンは自動的にお使いの地域時刻に設定されます
- 2027年までの日数:2026年1月2日以降に「次の元日」をクリックすると、2027年の元日までのカウントダウンが表示されます
- リリースまでの日数:公開日を入力し、時刻を午前9時(PT)またはリリース時間帯に設定します
- 締め切りまでの日数:締め切りを入力します。内訳の行はステータス投稿用に一文として読めます
2027年(または任意の年)までのカウントダウン
特定の年までカウントダウンしたいですか? 日付入力に 2027-01-01 と入力し、時刻はお使いのタイムゾーンで 00:00:00 のままにします。すると、その年があなたの場所で始まる瞬間まで「X日Y時間」と表示されます。全員にとって同じ瞬間までカウントダウンする必要がある場合(協調的な打ち上げなど)は、ローカルゾーンのままにせずタイムゾーンをUTCに設定します。内訳の下に表示されるUnixタイムスタンプはどのタイムゾーンでも同じで、この性質が移植性をもたらします。
適切なタイムゾーンを選ぶ
同じ壁掛け時計の日付と時刻でも、タイムゾーンが異なれば指す瞬間は異なります。誕生日や記念日、大晦日など地域で祝う行事へのカウントダウンでは、ブラウザが検出したタイムゾーンのままにしておきます。衛星の打ち上げ、うるう秒の挿入、契約期限など世界規模で告知される瞬間へのカウントダウンでは、その告知が使うタイムゾーン(多くはUTC)に設定します。両側のサマータイムの切り替えは自動的に処理され、基礎となるエポック値がずれることはありません。
過去の出来事からの経過時間を数える
目標がすでに過去であれば、同じパネルが「経過時間」カウンターになります。「プロジェクト開始からX日Y時間」や「前回の本番障害からの経過時間」を表示するのに便利です。数値は正の値となり、方向バッジは「目標は過去」に切り替わるため、書き換えずに内訳をステータスページやリリースノートにそのままコピーできます。
- Unixエポックの開始からの経過時間:目標を1970-01-01 00:00:00 UTCに設定します
- ソフトウェアのリリースからの経過時間:目標をリリースのタイムスタンプ(UTC)に設定します
- 個人的な節目からの経過時間:目標をその日のお使いのタイムゾーンでの真夜中に設定します
Y2038 — ソフトウェアにとって重要な本物のカウントダウン
「Y2038オーバーフロー」のプリセットは、符号付き32ビットUnixタイムスタンプがオーバーフローする瞬間である2038-01-19 03:14:07 UTCまでカウントダウンします。その時点で32ビットのtime_tをまだ使っているものはすべて、1901年を表す負の数に巻き戻ります。最新のOSや言語ランタイムは64ビットのタイムスタンプに移行済みですが、組み込みファームウェアや古いデータベースに落とし穴が潜んでいます。機器群を監査しているなら、進行中のカウントダウンはレポートの見出し数値として役立ちます。
自分のコードにカウントダウンを組み込む
計算はどの言語でも同じです。目標エポックから現在のエポックを引き、残りを年/月/日/時/分/秒に分解します。このツールは目標を一度だけUnixタイムスタンプとして計算し、ライブ更新は各インターバルでDate.now()を読むだけです。下のスニペットを使ってお使いのスタックで再現してください。唯一やっかいなのはカレンダー分解の部分です(月と年は長さが一定ではありません)。
- JavaScript: const left = target - Date.now(); const days = Math.floor(left / 86_400_000);
- Python: delta = target - datetime.now(timezone.utc); delta.days, delta.seconds
- Go: time.Until(target).Hours() / 24
- カレンダー分解には、手作りの月計算よりもライブラリ(luxon、date-fns、dateutil、java.time)を使うのがおすすめです