午前0時(日の開始)のTimestamp取得

任意のタイムゾーンで午前0時(日の開始)のUnix timestampを取得する方法。日単位のフロア操作、DSTのエッジケース、データベースでの日付グルーピング。

Conversion

00:00:00

詳細な説明

日の開始(午前0時、00:00:00)のUnix timestampを取得することは、日付ベースのグルーピング、日次集計、日付範囲の境界設定に不可欠です。課題は、「午前0時」がタイムゾーンに依存することです。ニューヨークの午前0時と東京の午前0時は異なる瞬間です。

UTCでの午前0時:

// JavaScript: 今日のUTC午前0時
const now = new Date();
const midnightUTC = Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate());
midnightUTC / 1000  // 秒単位のUnix timestamp
# Python: 今日のUTC午前0時
from datetime import datetime, timezone
today = datetime.now(timezone.utc).replace(hour=0, minute=0, second=0, microsecond=0)
int(today.timestamp())

特定のタイムゾーンでの午前0時:

// JavaScript: 米国東部時間の午前0時
const eastern = new Date(
  new Date().toLocaleString("en-US", { timeZone: "America/New_York" })
);
eastern.setHours(0, 0, 0, 0);
// ただしこのアプローチにはエッジケースあり — Temporal APIやライブラリを推奨
# Python: 米国東部時間の午前0時
from datetime import datetime
from zoneinfo import ZoneInfo
tz = ZoneInfo("America/New_York")
local_now = datetime.now(tz)
midnight = local_now.replace(hour=0, minute=0, second=0, microsecond=0)
int(midnight.timestamp())

整数演算による日単位のフロア:

Unix timestampからUTCの午前0時を計算する簡単な方法は、整数除算です:

midnight_utc = (timestamp // 86400) * 86400

これはUTCでのみ有効です。他のタイムゾーンの場合は、まずオフセットを適用し、フロアし、その後オフセットを引き戻す必要があります。

DSTと午前0時の問題:

一部のタイムゾーンでは、特定の日に午前0時が存在しない場合があります。ブラジルでは、DSTの春の前進が午前0時に行われる場合、時計は23:59:59から直接01:00:00に飛びます。この場合、「日の開始」は00:00:00ではなく01:00:00です。堅牢な日付ライブラリはこれを正しく処理しますが、手動の計算では壊れます。

データベースでの日別グルーピング: SQLでデータを日付でグルーピングする際は、日単位に切り捨てる前にタイムゾーンを適用してください。PostgreSQLでは:DATE_TRUNC('day', timestamp AT TIME ZONE 'America/New_York')

ユースケース

日次売上を表示するECダッシュボードでは、レポートの境界をUTCの日ではなく加盟店のローカルタイムゾーンの営業日に合わせるため、加盟店のローカルタイムゾーンでの午前0時timestampを計算する必要があります。

Try It — Timestamp Converter

フルツールを開く