現在の動作
オフセット計算に new Date(Date.UTC(year, month - 1, day, hour)) を使用しています。これはユーザーが選択したローカル時間と同じ時刻コンポーネントを持つUTCインスタントを表します。
問題
DST(夏時間)境界付近では、そのUTCインスタントでのオフセットが、意図したローカル時間でのオフセットと異なる場合があります。
具体例
春の切り替え日(例:3月第2日曜日)に「3:00」を選択した場合:
- UTC基準で取得したオフセットは切り替え前の値になる可能性がある
- 結果として、Discord タイムスタンプが1時間ずれる
影響範囲
- DST境界日のみ(年2回)
- 切り替え時刻前後の数時間
現在の緩和策
- サーバーTZ依存は
Date.UTC() で排除済み
- コメントでこの制限を文書化済み
- このBotは「だいたいの時間」を示すもので、厳密なスケジューリング用途ではない
将来的な解決策
- 反復的アプローチ: 概算UTC → オフセット取得 → 再計算 → 収束確認
- ライブラリ使用:
date-fns-tz や luxon で正確な変換
- Temporal API: Node.jsで広く利用可能になったら採用
関連
現在の動作
オフセット計算に
new Date(Date.UTC(year, month - 1, day, hour))を使用しています。これはユーザーが選択したローカル時間と同じ時刻コンポーネントを持つUTCインスタントを表します。問題
DST(夏時間)境界付近では、そのUTCインスタントでのオフセットが、意図したローカル時間でのオフセットと異なる場合があります。
具体例
春の切り替え日(例:3月第2日曜日)に「3:00」を選択した場合:
影響範囲
現在の緩和策
Date.UTC()で排除済み将来的な解決策
date-fns-tzやluxonで正確な変換関連