Start · Sprachen · JavaScript · Referenz · BatteryManager.dischargingTime

BatteryManager.dischargingTime

Eigenschaft

Schreibgeschützte Eigenschaft, die die geschätzte Restlaufzeit des Akkus in Sekunden liefert – oder <code>Infinity</code>, wenn geladen wird oder der Wert unbekannt ist.

seit JavaScript Chromium-Browser (Chrome 38+, Edge 79+, Opera 25+) Kategorie: webapi

Signatur

BatteryManager.dischargingTime

Beschreibung

dischargingTime ist eine schreibgeschützte Eigenschaft des BatteryManager-Objekts, das die Battery Status API liefert. Sie gibt die vom System geschätzte Zeit in Sekunden an, bis der Akku ganz leer ist.

Der Wert ist Infinity, wenn das Gerät gerade lädt (charging === true), wenn kein Akku vorhanden ist (z. B. bei einem Desktop-PC) oder wenn das System noch keine Schätzung berechnet hat. Kurz nach dem Abziehen des Ladekabels steht der Wert deshalb oft noch eine Weile auf Infinity.

Einen Zugriff auf das BatteryManager-Objekt bekommt man über navigator.getBattery(). Ändert sich der Wert, wird das Event dischargingtimechange ausgelöst. Typische Einsatzzwecke sind Energiesparmodi in Web-Apps, z. B. Animationen, Polling oder Hintergrund-Synchronisation zu drosseln, wenn die Restlaufzeit knapp wird.

Rückgabewert

Typ
number
Beschreibung
Geschätzte Restlaufzeit in Sekunden als number (ganzzahlig oder Infinity). Infinity heißt: das Gerät lädt, es gibt keinen Akku oder es liegt noch keine Schätzung vor.

Beispiele

Restlaufzeit auslesen und formatieren

const formatDuration = (seconds) => {
  if (!Number.isFinite(seconds)) return 'unbekannt / lädt';
  const h = Math.floor(seconds / 3600);
  const m = Math.floor((seconds % 3600) / 60);
  return `${h} h ${m} min`;
};

const showRemaining = async () => {
  if (!('getBattery' in navigator)) {
    console.log('Battery Status API nicht unterstützt');
    return;
  }
  const battery = await navigator.getBattery();
  console.log(`Restlaufzeit: ${formatDuration(battery.dischargingTime)}`);
};

showRemaining();
Restlaufzeit: 2 h 35 min

Auf Änderungen mit dischargingtimechange reagieren

const battery = await navigator.getBattery();

const onTimeChange = () => {
  const t = battery.dischargingTime;
  console.log(Number.isFinite(t)
    ? `Noch ca. ${Math.round(t / 60)} Minuten`
    : 'Keine Entladeschätzung (lädt oder unbekannt)');
};

battery.addEventListener('dischargingtimechange', onTimeChange);
// Alternative über die on-Property:
// battery.ondischargingtimechange = onTimeChange;

onTimeChange();

// Später wieder abmelden:
// battery.removeEventListener('dischargingtimechange', onTimeChange);
Noch ca. 142 Minuten

Energiesparmodus bei knapper Restlaufzeit aktivieren

const LOW_THRESHOLD = 15 * 60; // 15 Minuten

const battery = await navigator.getBattery();

const updatePowerMode = () => {
  const lowPower = !battery.charging &&
    Number.isFinite(battery.dischargingTime) &&
    battery.dischargingTime < LOW_THRESHOLD;

  document.documentElement.classList.toggle('power-saving', lowPower);
  console.log(lowPower ? 'Energiesparmodus AN' : 'Normalbetrieb');
};

battery.addEventListener('dischargingtimechange', updatePowerMode);
battery.addEventListener('chargingchange', updatePowerMode);
updatePowerMode();
Normalbetrieb

// Wichtig · Fallstricke

  • Browser-Kompatibilität: Nur in Chromium-basierten Browsern verfügbar. Firefox hat die API aus Datenschutzgründen entfernt (ab Version 52 für Webinhalte), Safari hat sie nie eingebaut. Deshalb immer vorher mit 'getBattery' in navigator prüfen.
  • Sicherer Kontext: navigator.getBattery() funktioniert nur über HTTPS (bzw. localhost). Eine Permissions Policy (battery) kann den Zugriff zusätzlich einschränken, z. B. in iframes.
  • Infinity richtig behandeln: Nicht direkt rechnen oder anzeigen – Math.round(Infinity / 60) ergibt Infinity. Vorher mit Number.isFinite() prüfen.
  • Nur eine Schätzung: Der Wert kommt vom Betriebssystem, schwankt je nach Last stark und wird aus Datenschutzgründen oft gerundet oder nur selten aktualisiert. Für exakte Berechnungen taugt er nicht.
  • Datenschutz: Akkuwerte wurden früher für Fingerprinting missbraucht. Nutze sie also nur für echte Verbesserungen der Nutzererfahrung.