============================================================ */ (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(); } })();
Sand & Gravel Calculator
Estimate cement, sand & gravel quantities for any concrete or aggregate project.
Project Type
Project Dimensions
Length
Width
Depth / Thickness
Mix Settings
Mix Grade / Ratio
Cement Bag Size
Cement Parts
Sand Parts
Gravel Parts
Display Units
Add 10% Wastage Buffer
Recommended — accounts for spills, compaction & cutting waste
!
Please enter valid positive values for all dimensions.
Total Project Volume
Mix Ratio: 1:1.5:3
Material Breakdown
Quantities already include a 10% wastage buffer for safe ordering.
Formulas, Notes & References
  • Wet Volume: L × W × D
  • Dry Mix Volume: Wet Volume × 1.54 (accounts for compaction & void ratio)
  • Cement: (C / Sum of Parts) × Dry Volume — convert to bags using density 1440 kg/m³
  • Sand: (S / Sum of Parts) × Dry Volume — bulk density ≈ 1600 kg/m³
  • Gravel: (G / Sum of Parts) × Dry Volume — bulk density ≈ 1750 kg/m³
  • Mix grades follow IS 456:2000 (India), ACI 211.1 (USA), and BS EN 206 (UK/Europe) standards.
  • For structural or load-bearing work, always verify quantities with a licensed civil or structural engineer.
  • Results are estimates for planning & procurement — actual site conditions may vary.

Sand and Gravel Calculator: Find Your Exact Material Quantities Instantly

Planning a concrete pour or a landscaping project and unsure how much material you actually need? This sand and gravel calculator gives you fast, accurate estimates for sand, gravel, and cement quantities based on your project dimensions and mix ratio — saving you from costly over-ordering or frustrating shortfalls. Whether you are a homeowner laying a patio or a contractor pricing a foundation, this tool does the heavy lifting in seconds.


What This Calculator Tells You

Enter your project details and the Zo Calculator sand gravel calculator instantly estimates:

  • Total volume of the mix required (in cubic feet or cubic meters)
  • Quantity of sand needed based on your selected mix ratio
  • Quantity of gravel (coarse aggregate) required for the mix
  • Cement quantity for those using this as a cement sand gravel calculator
  • Weight or bags of each material for easy purchasing
  • Adjusted totals with a standard 10–15% wastage buffer built in

How the Calculator Works (The Formula & Logic)

The core logic behind this gravel sand calculator is based on standard volumetric concrete mix design principles. Here is how it works step by step:

Step 1 — Calculate Total Volume

Total Volume = Length × Width × Depth

If your slab is 10 ft × 10 ft × 0.5 ft, the total volume is 50 cubic feet.

Step 2 — Apply the Dry Mix Factor

Concrete shrinks when it cures. A standard dry-to-wet factor of 1.54 is applied:

Dry Mix Volume = Total Volume × 1.54

Step 3 — Distribute by Mix Ratio

A common mix ratio for general concrete is 1:2:3 (Cement : Sand : Gravel). The sum of parts = 1 + 2 + 3 = 6.

Cement = (1/6) × Dry Mix Volume Sand = (2/6) × Dry Mix Volume Gravel = (3/6) × Dry Mix Volume

This is the same logic used in a professional concrete mix calculator for sand, gravel, and cement. The cement sand gravel ratio calculator simply lets you swap in different ratios (like 1:1.5:3 for stronger mixes) to match your specific project spec.


Standard Mix Ratios & Classifications

This table covers the most common mix grades used when you need to figure out how much sand and gravel for concrete calculator inputs to use:

Mix GradeRatio (Cement:Sand:Gravel)Typical Use
M101 : 3 : 6Lean concrete, blinding
M151 : 2 : 4Pathways, minor slabs
M201 : 1.5 : 3General slabs, footings
M251 : 1 : 2Beams, columns, driveways
M301 : 0.75 : 1.5High-strength structural work
Landscaping FillN/APure sand and gravel mix, no cement

For landscaping, drainage beds, or driveways that use a sand gravel and stone calculator approach (no cement), only the volume and aggregate ratio fields apply.


Step-by-Step Practical Example

Project: A concrete garden path — 20 ft long, 3 ft wide, 4 inches (0.33 ft) thick. Mix ratio: 1:2:3 (M20).

Step 1 — Find the volume 20 × 3 × 0.33 = 19.8 cubic feet

Step 2 — Apply the dry mix factor 19.8 × 1.54 = 30.49 cubic feet (dry mix)

Step 3 — Split by ratio (total parts = 6)

  • Cement: (1/6) × 30.49 = 5.08 cu ft → approx. 4 bags (50 kg each)
  • Sand: (2/6) × 30.49 = 10.16 cu ft
  • Gravel: (3/6) × 30.49 = 15.24 cu ft

This is precisely how a concrete sand and gravel calculator — or a full concrete sand gravel cement calculator — breaks down your purchase list before you head to the supplier.


How to Use Zo Calculator’s Sand and Gravel Tool

Using ZoCalculator.com takes under a minute:

  1. Enter your dimensions — Input the length, width, and depth (or thickness) of your project area in your preferred unit (feet, meters, or inches).
  2. Select your mix type — Choose “Concrete Mix” if you need a cement sand and gravel calculator result, or “Aggregate Only” for landscaping projects.
  3. Set your mix ratio — Pick from preset ratios (M15, M20, M25) or enter a custom cement sand gravel ratio for specialist work.
  4. Hit Calculate — The tool instantly displays volumes and estimated quantities for cement, sand, and gravel separately.
  5. Read your results — Results show both volume (cubic feet/meters) and approximate weight or bag count for easy shopping.
  6. Add wastage — Toggle the 10% wastage buffer on or off depending on whether you want a tight or conservative estimate.

Practical Applications and Real-World Uses

  • DIY home projects — Homeowners calculating sand and gravel for concrete slabs, pathways, shed bases, and fence post footings without needing a contractor.
  • Landscaping and drainage — Gardeners and landscapers using a sand gravel and stone calculator to estimate fill for raised beds, French drains, or gravel paths.
  • Construction estimating — Small contractors using this as a concrete mix calculator for sand, gravel, and cement to build supplier quotes quickly and avoid waste.
  • Concrete batch planning — Site engineers validating manual calculations for M20 or M25 mixes before ordering a ready-mix truck.
  • Educational use — Civil engineering and construction students learning how to calculate sand and gravel for concrete using real mix design principles.
  • Supplier comparison — Anyone using this as a calculator for sand and gravel to compare quotes from multiple suppliers with exact quantities in hand.

Important Notes & Technical Limitations

  • Estimates only: All outputs are approximations based on standard dry-mix density assumptions. Actual quantities may vary based on aggregate moisture content, grading, and compaction.
  • No structural design: This concrete sand gravel calculator is a planning and reference tool — it does not replace a structural engineer’s specification for load-bearing elements.
  • Mix ratio inputs matter: Changing the ratio (e.g., from 1:2:3 to 1:1:2) significantly changes outputs. Always verify your ratio against your project’s engineering spec or local building code.
  • Regional variation: Density values for sand and gravel vary by region and material source. Results from tools like the pioneer sand and gravel calculator may differ slightly based on local aggregate standards.

Helpful References & Sources


🙋 Frequently Asked Questions (FAQs)

How do I calculate how much sand and gravel I need for concrete?

Multiply your project’s length × width × depth to get the total volume, then multiply by 1.54 to account for the dry mix factor. Divide that result by the sum of your mix ratio parts (e.g., 6 for a 1:2:3 mix) and multiply each part to find your cement, sand, and gravel quantities individually. Our sand and gravel calculator automates this entire process instantly.

What is the correct sand-to-gravel ratio for concrete?

The most common general-purpose ratio is 1 part cement : 2 parts sand : 3 parts gravel (written as 1:2:3 or M20 grade). For stronger structural work like columns or beams, a 1:1:2 ratio is often used. Your cement sand gravel ratio calculator result will change significantly depending on which ratio you input, so always match the ratio to your project’s strength requirement.

How many bags of cement do I need per cubic meter of concrete?

For a standard M20 mix (1:1.5:3), you need approximately 8 bags of 50 kg cement per cubic meter of finished concrete. The sand and gravel mix for concrete calculator on Zo Calculator breaks this down automatically once you enter your slab dimensions and mix ratio.

Can I use this calculator for a gravel-only landscaping project (no cement)?

Yes. The sand gravel and stone calculator mode on ZoCalculator.com works for aggregate-only projects. Simply select “Aggregate Only,” enter your area dimensions and depth, and the tool calculates total cubic footage or cubic meters of material needed — no cement fields required.

What is the difference between M15, M20, and M25 concrete?

These are standard concrete grade designations based on 28-day compressive strength. M15 achieves 15 MPa (suitable for pathways), M20 achieves 20 MPa (standard slabs and footings), and M25 achieves 25 MPa (structural beams and columns). The concrete mix calculator for sand, gravel, and cement adjusts the aggregate quantities automatically when you switch between these grades.

How do I calculate sand and gravel for a concrete slab?

First, calculate the slab volume (length × width × thickness). Apply the 1.54 dry-mix factor, then divide the result into your cement, sand, and gravel portions using your chosen ratio. For a 10 ft × 10 ft × 4-inch slab using a 1:2:3 mix, you would need roughly 3.5 bags of cement, 8.5 cubic feet of sand, and 12.8 cubic feet of gravel. The concrete sand and gravel calculator on this page gives you these figures instantly.

Is a sand and gravel calculator accurate enough for a large construction project?

For planning, budgeting, and supplier ordering, the concrete sand gravel cement calculator provides reliable estimates within 5–10% of actual needs. For critical structural pours on large commercial projects, the outputs should be reviewed and signed off by a qualified structural or civil engineer using full ACI mix design procedures.

What does the 1.54 factor mean in a concrete mix calculation?

The 1.54 factor (sometimes written as 1.55) accounts for the fact that dry loose aggregates compact and reduce in volume when mixed with water and cement. In simpler terms, you need about 54% more dry material than the final wet concrete volume you are trying to achieve. Every reliable concrete sand gravel calculator applies this factor to produce accurate dry-material purchase quantities.

How much gravel do I need per bag of cement?

For a standard 1:2:3 mix, you need 3 parts gravel for every 1 part cement. If you use one 50 kg bag of cement (approximately 1.25 cubic feet), you need about 3.75 cubic feet of gravel and 2.5 cubic feet of sand. The sand gravel and cement calculator on Zo Calculator scales these proportions precisely to your actual project volume.

Can this calculator handle both metric and imperial units?

Yes. The sand and gravel calculator on ZoCalculator.com accepts inputs in feet and inches (imperial) or meters and centimeters (metric), and outputs results in both cubic feet and cubic meters. You can also toggle between kilograms and pounds for weight-based estimates, making it flexible for projects across different regions and standards.


Explore Related Calculators on Zo Calculator