============================================================ */ (function(){ 'use strict'; function init(){ var root = document.getElementById('zssb'); if(!root) return; /* ── State ──────────────────────────────────────── */ var s1Type = 'sleeper'; // 'sleeper' or 'offduty' var s2Type = 'sleeper'; /* ── Toggle button setup ────────────────────────── */ function setupToggle(slpId, offId, callback){ var slpBtn = document.getElementById(slpId); var offBtn = document.getElementById(offId); if(!slpBtn || !offBtn) return; slpBtn.addEventListener('click', function(){ slpBtn.classList.add('active'); offBtn.classList.remove('active'); callback('sleeper'); }); offBtn.addEventListener('click', function(){ offBtn.classList.add('active'); slpBtn.classList.remove('active'); callback('offduty'); }); } setupToggle('zssb-s1-sleeper', 'zssb-s1-offduty', function(t){ s1Type = t; }); setupToggle('zssb-s2-sleeper', 'zssb-s2-offduty', function(t){ s2Type = t; }); /* ── Format decimal hours → "Xh Ym" ─────────────── */ function fmtHrs(h){ if(isNaN(h) || h < 0) return '0h 0m'; var hh = Math.floor(h); var mm = Math.round((h - hh) * 60); if(mm === 60){ hh++; mm = 0; } if(hh === 0 && mm === 0) return '0h 0m'; if(hh === 0) return mm + 'm'; if(mm === 0) return hh + 'h'; return hh + 'h ' + mm + 'm'; } /* ── Add decimal hours to a time string ─────────── */ function addHrs(timeStr, hrs){ if(!timeStr || timeStr === '') return null; var parts = timeStr.split(':'); if(parts.length < 2) return null; var totalMins = parseInt(parts[0], 10) * 60 + parseInt(parts[1], 10) + Math.round(hrs * 60); totalMins = ((totalMins % 1440) + 1440) % 1440; var h = Math.floor(totalMins / 60); var m = totalMins % 60; return (h < 10 ? '0' : '') + h + ':' + (m < 10 ? '0' : '') + m; } /* ── Convert 24hr "HH:MM" → 12hr "H:MM AM/PM" ─── */ function to12hr(t24){ if(!t24) return null; var p = t24.split(':'); var h = parseInt(p[0], 10); var m = p[1]; var ampm = h >= 12 ? 'PM' : 'AM'; h = h % 12; if(h === 0) h = 12; return h + ':' + m + ' ' + ampm; } /* ── Warning helpers ─────────────────────────────── */ function showWarn(msg){ var w = document.getElementById('zssb-warn'); var wm = document.getElementById('zssb-wmsg'); if(w && wm){ wm.textContent = msg; w.classList.add('show'); } } function hideWarn(){ var w = document.getElementById('zssb-warn'); if(w) w.classList.remove('show'); } /* ── Status bar progress ─────────────────────────── */ function setStatus(step){ var pills = ['zssb-pill-1', 'zssb-pill-2', 'zssb-pill-3']; for(var i = 0; i < pills.length; i++){ var el = document.getElementById(pills[i]); if(el){ el.classList[i < step ? 'add' : 'remove']('active'); } } } /* ════════════════════════════════════════════════ MAIN CALCULATION — FMCSA 49 CFR §395.1(g) ════════════════════════════════════════════════ */ function calc(){ hideWarn(); setStatus(2); /* Read inputs */ var drivenBefore = parseFloat(document.getElementById('zssb-driven').value) || 0; var drivenBetween = parseFloat(document.getElementById('zssb-driven-between').value) || 0; var s1h = parseFloat(document.getElementById('zssb-s1-hrs').value) || 0; var s1m = parseFloat(document.getElementById('zssb-s1-min').value) || 0; var s2h = parseFloat(document.getElementById('zssb-s2-hrs').value) || 0; var s2m = parseFloat(document.getElementById('zssb-s2-min').value) || 0; var s1Start = document.getElementById('zssb-s1-start').value; var s2Start = document.getElementById('zssb-s2-start').value; /* Convert to decimal hours */ var split1 = s1h + (s1m / 60); var split2 = s2h + (s2m / 60); /* ── Validation ────────────────────────────────── */ if(split1 <= 0 && split2 <= 0){ showWarn('Please enter the duration for at least one split rest period.'); return; } if(split1 < 0 || split2 < 0){ showWarn('Rest period durations cannot be negative.'); return; } if(drivenBefore < 0 || drivenBetween < 0){ showWarn('Driving hours cannot be negative.'); return; } var totalDriven = drivenBefore + drivenBetween; if(totalDriven > 11){ showWarn('Total hours driven (' + totalDriven.toFixed(2) + ' hrs) exceeds the 11-hour driving limit.'); return; } /* ── FMCSA Split Sleeper Berth Logic ───────────── RULE 1: Combined rest >= 10 hours RULE 2: The longer period must be >= 7 hrs AND in sleeper berth RULE 3: The shorter period must be >= 2 hrs (sleeper or off-duty) ─────────────────────────────────────────────────── */ var totalRest = split1 + split2; var combinedOk = totalRest >= 10; var longSplit = Math.max(split1, split2); var shortSplit = Math.min(split1, split2); var longIsS1 = split1 >= split2; var longType = longIsS1 ? s1Type : s2Type; /* Long split: must be >= 7 hrs AND sleeper berth */ var longOk = (longSplit >= 7) && (longType === 'sleeper'); /* Short split: must be >= 2 hrs (any type) */ var shortOk = (shortSplit >= 2); /* Single-split detection (only one period entered) */ var oneSplit = (split1 > 0 && split2 === 0) || (split1 === 0 && split2 > 0); var isCompliant = false; var reason = ''; if(oneSplit){ isCompliant = false; reason = 'Only one split period entered. Please enter both Split 1 and Split 2 durations to check full FMCSA compliance.'; } else { var failReasons = []; if(!longOk){ if(longSplit < 7){ failReasons.push('Longer split (' + fmtHrs(longSplit) + ') is under the required 7-hour minimum.'); } else { failReasons.push('Longer split (' + fmtHrs(longSplit) + ') must be in the sleeper berth, not off-duty.'); } } if(!shortOk){ failReasons.push('Shorter split (' + fmtHrs(shortSplit) + ') is under the required 2-hour minimum.'); } if(!combinedOk){ failReasons.push('Combined rest (' + fmtHrs(totalRest) + ') is under the 10-hour minimum required.'); } isCompliant = longOk && shortOk && combinedOk; if(isCompliant){ reason = 'Both splits meet FMCSA requirements. Your 14-hour clock is paused during both rest periods and restarts at the end of Split 2.'; } else { reason = failReasons.join(' '); } } /* ── Remaining drive time ───────────────────────── */ var driveRemaining = Math.max(0, 11 - totalDriven); /* ── Timeline data (if start times provided) ──── */ var timelineData = null; if(s1Start && s1Start !== ''){ var s1End = addHrs(s1Start, split1); var midDrive = s2Start && s2Start !== '' ? s2Start : (s1End ? addHrs(s1End, drivenBetween) : null); var s2End = midDrive ? addHrs(midDrive, split2) : null; timelineData = { s1Start: to12hr(s1Start), s1End: to12hr(s1End), s2Start: s2Start && s2Start !== '' ? to12hr(s2Start) : (midDrive ? to12hr(midDrive) : null), s2End: to12hr(s2End), resumeTime: s2End ? to12hr(s2End) : null }; } /* ── Render results ──────────────────────────────── */ renderResults(isCompliant, reason, { split1: split1, split2: split2, totalRest: totalRest, longSplit: longSplit, shortSplit: shortSplit, longOk: longOk, shortOk: shortOk, combinedOk: combinedOk, longType: longType, drivenBefore: drivenBefore, drivenBetween: drivenBetween, totalDriven: totalDriven, driveRemaining:driveRemaining, s1Type: s1Type, s2Type: s2Type, oneSplit: oneSplit }, timelineData); setStatus(3); } /* ════════════════════════════════════════════════ RENDER RESULTS ════════════════════════════════════════════════ */ function renderResults(isCompliant, reason, d, tl){ /* Element refs */ var resEl = document.getElementById('zssb-res'); var banner = document.getElementById('zssb-banner'); var bannerStatus= document.getElementById('zssb-banner-status'); var bannerReason= document.getElementById('zssb-banner-reason'); var bannerSvg = document.getElementById('zssb-banner-svg'); var cardsEl = document.getElementById('zssb-cards'); var breakdownEl = document.getElementById('zssb-breakdown'); var timelineEl = document.getElementById('zssb-timeline'); var tlWrap = document.getElementById('zssb-timeline-wrap'); /* ── Compliance Banner ──────────────────────────── */ if(d.oneSplit){ banner.className = 'compliance-banner non-compliant'; bannerStatus.textContent = 'Incomplete — Enter Both Splits'; bannerSvg.innerHTML = ''; } else if(isCompliant){ banner.className = 'compliance-banner compliant'; bannerStatus.textContent = '✅ FMCSA Compliant — Valid Split'; bannerSvg.innerHTML = ''; } else { banner.className = 'compliance-banner non-compliant'; bannerStatus.textContent = '❌ Non-Compliant — Invalid Split'; bannerSvg.innerHTML = ''; } bannerReason.textContent = reason; /* ── Summary Cards ──────────────────────────────── */ var cards = []; if(!d.oneSplit){ cards.push({ v: fmtHrs(d.split1), u: d.s1Type === 'sleeper' ? 'SLEEPER' : 'OFF-DUTY', n: 'Split 1 Duration', cls: d.s1Type === 'sleeper' ? 'blue' : 'orange' }); cards.push({ v: fmtHrs(d.split2), u: d.s2Type === 'sleeper' ? 'SLEEPER' : 'OFF-DUTY', n: 'Split 2 Duration', cls: d.s2Type === 'sleeper' ? 'blue' : 'orange' }); cards.push({ v: fmtHrs(d.totalRest), u: 'TOTAL REST', n: 'Combined Off-Duty', cls: d.combinedOk ? 'green' : 'red' }); cards.push({ v: fmtHrs(d.driveRemaining), u: 'REMAINING', n: 'Drive Time Left', cls: d.driveRemaining > 4 ? 'green' : (d.driveRemaining > 2 ? 'orange' : 'red') }); } cardsEl.innerHTML = cards.map(function(c){ return '
' + '
' + c.v + '
' + '
' + c.u + '
' + '
' + c.n + '
' + '
'; }).join(''); /* ── Breakdown Table ────────────────────────────── */ var rows = []; if(!d.oneSplit){ rows.push({lbl: 'Split 1 (' + (d.s1Type === 'sleeper' ? 'Sleeper Berth' : 'Off-Duty') + ')', val: fmtHrs(d.split1), cls: ''}); rows.push({lbl: 'Split 2 (' + (d.s2Type === 'sleeper' ? 'Sleeper Berth' : 'Off-Duty') + ')', val: fmtHrs(d.split2), cls: ''}); rows.push({lbl: 'Combined Rest Total', val: fmtHrs(d.totalRest) + (d.totalRest >= 10 ? ' ✓' : ' ✗ (Need ≥10h)'), cls: d.combinedOk ? 'ok' : 'fail'}); rows.push({lbl: 'Longer Split ≥7 hrs in Sleeper Berth', val: d.longOk ? '✓ Pass' : '✗ Fail', cls: d.longOk ? 'ok' : 'fail'}); rows.push({lbl: 'Shorter Split ≥2 hrs (any type)', val: d.shortOk ? '✓ Pass' : '✗ Fail', cls: d.shortOk ? 'ok' : 'fail'}); rows.push({lbl: 'Hours Driven Before Split 1', val: fmtHrs(d.drivenBefore), cls: 'info'}); rows.push({lbl: 'Hours Driven Between Splits', val: fmtHrs(d.drivenBetween), cls: 'info'}); rows.push({lbl: 'Total Hours Driven', val: fmtHrs(d.totalDriven) + ' / 11 hrs max', cls: d.totalDriven < 11 ? 'ok' : 'fail'}); rows.push({lbl: 'Drive Time Remaining After Splits', val: fmtHrs(d.driveRemaining), cls: d.driveRemaining > 0 ? 'ok' : 'fail'}); rows.push({lbl: '14-Hour Clock Paused During Splits', val: isCompliant ? 'Yes — Both periods excluded' : 'Not applicable (fix issues above)', cls: isCompliant ? 'ok' : 'fail'}); } breakdownEl.innerHTML = rows.map(function(r){ return '
' + '' + r.lbl + '' + '' + r.val + '' + '
'; }).join(''); /* ── Timeline ───────────────────────────────────── */ if(!d.oneSplit){ tlWrap.style.display = 'block'; var items = []; items.push({ dot: 'drive', label: 'Started Driving', desc: 'Drove ' + fmtHrs(d.drivenBefore) + ' before first rest period.' }); items.push({ dot: 'sleep', label: 'Split 1 Begins' + (tl && tl.s1Start ? ' at ' + tl.s1Start : ''), desc: fmtHrs(d.split1) + ' ' + (d.s1Type === 'sleeper' ? 'in Sleeper Berth' : 'Off-Duty') + (tl && tl.s1End ? ' → Ends: ' + tl.s1End : '') }); if(d.drivenBetween > 0){ items.push({ dot: 'drive', label: 'Resumed Driving Between Splits', desc: 'Drove ' + fmtHrs(d.drivenBetween) + ' between the two rest periods.' }); } items.push({ dot: 'sleep', label: 'Split 2 Begins' + (tl && tl.s2Start ? ' at ' + tl.s2Start : ''), desc: fmtHrs(d.split2) + ' ' + (d.s2Type === 'sleeper' ? 'in Sleeper Berth' : 'Off-Duty') + (tl && tl.s2End ? ' → Ends: ' + tl.s2End : '') }); if(isCompliant){ items.push({ dot: 'done', label: '14-Hour Clock Restarts' + (tl && tl.resumeTime ? ' at ' + tl.resumeTime : ''), desc: 'Both splits complete. ' + fmtHrs(d.driveRemaining) + ' drive time remaining.' }); } else { items.push({ dot: 'off', label: 'Non-Compliant — Cannot Resume', desc: 'Fix the split issues above before resuming driving.' }); } timelineEl.innerHTML = items.map(function(it){ return '
' + '
' + '
' + '
' + it.label + '
' + '
' + it.desc + '
' + '
'; }).join(''); } else { tlWrap.style.display = 'none'; } /* ── Show results panel ─────────────────────────── */ resEl.classList.add('show'); setTimeout(function(){ resEl.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); }, 100); } /* ════════════════════════════════════════════════ RESET ════════════════════════════════════════════════ */ function resetAll(){ /* Clear number inputs */ var numIds = ['zssb-driven', 'zssb-driven-between', 'zssb-s1-hrs', 'zssb-s1-min', 'zssb-s2-hrs', 'zssb-s2-min']; numIds.forEach(function(id){ var el = document.getElementById(id); if(el) el.value = ''; }); /* Clear time inputs */ ['zssb-s1-start', 'zssb-s2-start'].forEach(function(id){ var el = document.getElementById(id); if(el) el.value = ''; }); /* Reset toggle states */ s1Type = 'sleeper'; s2Type = 'sleeper'; ['zssb-s1-sleeper', 'zssb-s2-sleeper'].forEach(function(id){ var el = document.getElementById(id); if(el) el.classList.add('active'); }); ['zssb-s1-offduty', 'zssb-s2-offduty'].forEach(function(id){ var el = document.getElementById(id); if(el) el.classList.remove('active'); }); /* Hide warning and results */ hideWarn(); var resEl = document.getElementById('zssb-res'); if(resEl) resEl.classList.remove('show'); setStatus(1); } /* ── Event Listeners ──────────────────────────────── */ var calcBtn = document.getElementById('zssb-btn'); if(calcBtn) calcBtn.addEventListener('click', calc); var rstBtn = document.getElementById('zssb-reset'); if(rstBtn) rstBtn.addEventListener('click', resetAll); /* Enter key triggers calculation */ var numFields = ['zssb-driven', 'zssb-driven-between', 'zssb-s1-hrs', 'zssb-s1-min', 'zssb-s2-hrs', 'zssb-s2-min']; numFields.forEach(function(id){ var el = document.getElementById(id); if(el) el.addEventListener('keydown', function(e){ if(e.key === 'Enter') calc(); }); }); } /* end init() */ /* ── Safe DOM-ready execution ───────────────────────── */ if(document.readyState === 'loading'){ document.addEventListener('DOMContentLoaded', init); } else { init(); } })();
Battery Life Calculator
Instantly find runtime for any device or car battery — mAh, Wh, or Ah.
Battery Type
Inputs
Battery Capacity
Device Power Draw
Battery Voltage
Current Charge Level
Efficiency Factor
!
Please fill in all required fields with valid positive values.
Results
Estimated Battery Runtime
Inputs
Battery Capacity
Total Load
Depth of Discharge
!
Please enter valid positive values for capacity and load.
Results
Estimated Runtime Under Load
Formulas, Assumptions & Notes
  • Device (mAh + mA): Runtime = (Capacity × Charge% × Efficiency) ÷ Draw
  • Device (Wh + W): Runtime = (Wh × Charge% × Efficiency) ÷ Watts
  • Device (mAh + W): Capacity is first converted: Wh = (mAh × Voltage) ÷ 1000, then Wh ÷ W formula applies.
  • Car Battery (Ah + A): Runtime = (Ah × Depth of Discharge) ÷ Load (A)
  • Efficiency factor accounts for heat loss, voltage sag, and battery aging.
  • For lead-acid car batteries, discharging below 50% shortens cycle life significantly.
  • Results are estimates for planning purposes. Actual runtime varies with temperature, load fluctuation, and battery condition.
  • Source: Battery University (batteryuniversity.com) — lithium-ion and lead-acid discharge theory.

Calculate Battery Life: Find Your Device's Runtime Instantly

Whether you're planning a road trip, powering a remote worksite, or just tired of your laptop dying mid-meeting, knowing how to calculate battery life ahead of time changes everything. This free tool on Zo Calculator takes your battery's capacity and your device's power draw and instantly tells you exactly how long your battery will last — no guesswork, no complicated math.


What This Calculator Tells You

Enter a few simple values and get back everything you need to plan around your power source:

  • Estimated battery runtime in hours and minutes
  • Battery capacity usage at any given power draw (mAh or Wh)
  • Remaining runtime based on current charge percentage
  • Adjusted runtime accounting for real-world efficiency loss
  • Car battery discharge time under a specific electrical load
  • Cycle life estimate — roughly how many charge/discharge cycles your battery supports

How the Calculator Works (The Formula & Logic)

The core logic behind how to calculate battery life is straightforward. Every battery has two key properties: how much energy it stores (capacity) and how fast your device drains it (load/current draw). Divide one by the other and you get runtime.

The Core Battery Life Formula:

Battery Life (Hours) = Battery Capacity (mAh) ÷ Device Current Draw (mA)

For devices rated in Watts and Watt-hours instead of milliamps:

Battery Life (Hours) = Battery Energy (Wh) ÷ Device Power Consumption (W)

Because real-world conditions are never perfect, the calculator also applies an efficiency factor (typically 0.85 or 85%) to account for heat loss, voltage drop, and aging:

Adjusted Battery Life = (Capacity ÷ Current Draw) × Efficiency Factor

For a car battery life calculator scenario, the same formula applies — just use the battery's amp-hour (Ah) rating and the total amperage of all connected loads.


Standard Battery Life Ratings & Classifications

Runtime ResultClassificationTypical Use Case
Less than 2 hoursVery LowHigh-drain devices (power tools, gaming laptops)
2 – 5 hoursBelow AverageBudget laptops, older smartphones
5 – 8 hoursAverageMid-range laptops, tablets
8 – 12 hoursGoodModern ultrabooks, flagship phones
12 – 20 hoursExcellentE-readers, low-power IoT devices
20+ hoursOutstandingIndustrial sensors, backup power systems
Car Battery (50–100 Ah)Vehicle-SpecificDepends entirely on total electrical load

Step-by-Step Practical Example

Let's walk through exactly how to calculate the battery life of a laptop manually so you can verify the tool's output.

Scenario: You have a laptop with a 60 Wh battery that consumes 15 W of power during typical use.

Step 1 — Identify your values:

  • Battery Capacity = 60 Wh
  • Power Consumption = 15 W
  • Efficiency Factor = 0.85 (standard real-world estimate)

Step 2 — Apply the formula:

  • Raw Runtime = 60 Wh ÷ 15 W = 4.0 hours
  • Adjusted Runtime = 4.0 × 0.85 = 3.4 hours

Step 3 — Interpret the result:

  • Your laptop will realistically run for approximately 3 hours and 24 minutes before needing a charge under normal use conditions.

Increase the power draw (e.g., running a GPU-heavy task at 30 W) and that drops to roughly 1 hour 42 minutes — which is exactly why this tool matters before you head into the field.


How to Use Zo Calculator's Battery Life Tool

Getting your result on ZoCalculator.com takes under a minute:

  1. Select your battery type — choose between a device battery (mAh/Wh) or a car/lead-acid battery (Ah).
  2. Enter battery capacity — find this printed on your battery label or in your device specs (e.g., 5000 mAh, 60 Wh, or 70 Ah for a car battery).
  3. Enter current draw or power consumption — check your device's spec sheet, charger wattage, or use a USB power meter for an accurate reading.
  4. Set your current charge level — if your battery isn't fully charged, enter the percentage so the result reflects actual remaining runtime.
  5. Adjust the efficiency factor — leave it at the default 85% for most consumer devices, or lower it for older or heavily cycled batteries.
  6. Hit Calculate — your runtime result appears instantly, broken down in hours and minutes with an explanation of each value.

Practical Applications and Real-World Uses

Knowing how to calculate the battery life of a device or vehicle isn't just a technical curiosity — it has direct, practical value:

  • Travelers & remote workers — Confirm your laptop or power bank can last a long-haul flight or full workday before leaving the house.
  • Automotive & DIY enthusiasts — Use the car battery life calculator function to check how long accessories (dash cams, lights, inverters) can run without draining your vehicle battery overnight.
  • Solar & off-grid energy systems — Size your battery bank correctly by calculating how long stored energy will power your appliances during low-sunlight periods.
  • Engineers & product developers — Validate battery specs during prototype testing to ensure a device meets its rated runtime before launch.
  • Emergency preparedness — Calculate how long a backup battery or UPS will power essential devices during an outage.
  • Students & educators — Use the tool as a live demonstration of Ohm's Law and energy consumption concepts in physics or electronics classes.

Important Notes & Technical Limitations

Zo Calculator's battery life tool is designed for planning and educational reference. Keep these factors in mind:

  1. Efficiency varies by battery age and chemistry — Lithium-ion batteries typically degrade to ~80% capacity after 300–500 full cycles. Older batteries will fall below the 85% default efficiency estimate.
  2. Power draw is rarely constant — Devices like smartphones fluctuate between low-power idle states and high-draw tasks (GPS, video, gaming). The result reflects an average, not a guaranteed minimum.
  3. Temperature affects performance significantly — Cold weather (below 0°C / 32°F) can reduce effective battery capacity by 20–40%, especially in car batteries and lithium packs.
  4. This tool does not replace a Battery Management System (BMS) — For safety-critical applications (medical equipment, EVs, industrial machinery), always rely on certified hardware monitoring systems.

Helpful References & Sources

  • Battery Universitybatteryuniversity.com — In-depth technical guides on battery chemistry, capacity, and cycle life.
  • U.S. Department of Energy energy.gov — Official resources on energy storage, electric vehicles, and battery technology standards.
  • Wikipedia: Electric Batteryen.wikipedia.org/wiki/Electric_battery — Comprehensive reference covering battery types, capacity ratings, and discharge theory.

🙋 Frequently Asked Questions (FAQs)

How do I calculate battery life for my laptop or phone?

To calculate battery life, divide your battery's capacity (in Wh or mAh) by your device's power consumption (in W or mA). For example, a 4000 mAh phone battery powering a 500 mA load will last approximately 8 hours. Multiply the raw result by 0.85 to get a realistic, efficiency-adjusted estimate.

What is the formula to calculate battery life in hours?

The standard formula is: Battery Life (hrs) = Capacity (mAh) ÷ Current Draw (mA). For watt-based devices, use: Battery Life (hrs) = Energy (Wh) ÷ Power (W). Always apply an efficiency factor of around 80–90% to account for real-world energy losses and aging.

How do I use a car battery life calculator?

To calculate car battery life under a load, use the battery's amp-hour (Ah) rating divided by the total current draw of all connected devices in amps. A 60 Ah battery powering a 5 A load will theoretically last 12 hours — though real-world depth-of-discharge limits mean you should plan for roughly 50–70% of that figure to avoid damaging the battery.

Why does my actual battery life differ from the calculated result?

Calculated battery life is a theoretical estimate based on average power draw and assumed efficiency. Real-world runtime differs because of screen brightness, background apps, temperature fluctuations, battery age, and inconsistent power loads. The efficiency factor (default 85%) in Zo Calculator's tool already accounts for much of this variance, but individual results will always vary.

What does mAh mean and how does it affect battery life?

mAh stands for milliamp-hours and measures how much electrical charge a battery can store. A higher mAh rating means more stored energy and a longer potential runtime. A 5000 mAh battery holds twice the charge of a 2500 mAh battery, so it will last roughly twice as long under the same power load — all else being equal.

How long will a 100 Ah car battery last running a 10 A load?

A 100 Ah car battery running a 10 A continuous load will last approximately 10 hours in theory (100 ÷ 10 = 10). Applying an 85% efficiency factor brings the realistic estimate to about 8.5 hours. For lead-acid batteries specifically, it's best practice not to discharge below 50% to preserve battery health, giving you a practical safe runtime of around 5 hours.

Can I calculate battery life from watts?

Yes. If you know your device's wattage and your battery's watt-hour (Wh) rating, simply divide: Runtime = Wh ÷ W. Many modern laptop and power bank batteries list their capacity in Wh on the label, making this the most direct method for those devices without needing to convert between mAh and volts.

How do I find my device's current draw for the calculation?

Check your device's official spec sheet or user manual for a "typical power consumption" or "rated current" figure. Alternatively, you can measure it directly using an inexpensive USB power meter (for USB-powered devices) or a clamp meter (for larger systems). For a quick estimate, search your device model + "power consumption" or "wattage" online.

Does battery life decrease over time?

Yes. Rechargeable batteries — particularly lithium-ion — lose capacity with each charge cycle. Most lithium-ion batteries retain about 80% of their original capacity after 300–500 full cycles. This means a battery that once delivered 10 hours of runtime may only deliver 8 hours after a year or two of daily charging. Factoring in a lower efficiency value when using the calculator will reflect this degradation more accurately.

Is ZoCalculator.com's battery life tool free to use?

Yes, the calculate battery life tool on ZoCalculator.com is completely free with no signup, no download, and no limits. Simply enter your battery capacity and device draw, and get an instant result directly in your browser on any device.


Explore Related Calculators on Zo Calculator