Pregnancy Test & hCG Calculator Test Timing and hCG Results

Pregnancy Test & hCG Calculator

Your result at a glance

Find out the best time to take a pregnancy test, or understand what your hCG result means.

Show dates in:

When should I take a pregnancy test?

Choose the option that suits you and enter the date.

Which date do you know?
days

Understanding your hCG result

Enter your blood test result exactly as shown in your lab report.

';var w = null; try { w = window.open('', '_blank'); } catch (e) { w = null; } if (!w) { toast('Could not open the download window. Please allow pop-ups and try again.'); return; } w.document.write(html); w.document.close(); try { w.focus(); } catch (e) {} setTimeout(function () { try { w.print(); } catch (e) {} }, 500); }function wireResultButtons() { var sb = gid('hcgcalc-share-btn'); if (sb) sb.addEventListener('click', shareResults); var pb = gid('hcgcalc-pdf-btn'); if (pb) pb.addEventListener('click', downloadPdf); }/* ---------------- tabs ---------------- */var activeMode = 'timing'; var tabs = $$('.hcgcalc-tab', root); var panels = $$('.hcgcalc-panel', root);function setMode(mode) { tabs.forEach(function (t) { var on = t.getAttribute('data-mode') === mode; t.classList.toggle('active', on); t.setAttribute('aria-selected', on ? 'true' : 'false'); }); activeMode = mode; panels.forEach(function (p) { p.classList.toggle('active', p.getAttribute('data-panel') === mode); }); clearError(); clearResults(); }tabs.forEach(function (tab) { tab.addEventListener('click', function () { setMode(tab.getAttribute('data-mode')); }); });/* ---------------- timing basis cards ---------------- */var basisInputs = $$('input[name="timing-basis"]', root); function updateBasis() { var v = 'expected'; var sel = root.querySelector('input[name="timing-basis"]:checked'); if (sel) v = sel.value; basisInputs.forEach(function (i) { var lab = i.closest ? i.closest('.hcgcalc-choice') : null; if (lab) lab.classList.toggle('active', i.checked); }); $$('[data-timing-fields]', root).forEach(function (el) { el.classList.toggle('hcgcalc-hidden', el.getAttribute('data-timing-fields') !== v); }); } basisInputs.forEach(function (i) { i.addEventListener('change', updateBasis); }); updateBasis();/* ---------------- calendar toggle ---------------- */$$('input[name="hcg-calendar"]', root).forEach(function (i) { i.addEventListener('change', function () { if (resultsBox && !resultsBox.classList.contains('hcgcalc-hidden')) runActive(); }); });function runActive() { try { if (activeMode === 'timing') calcTiming(); else calcSingle(); } catch (e) { showError('An unexpected error occurred. Please refresh the page and try again.'); } }/* ---------------- MODE 1: test timing ---------------- */function calcTiming() { clearError(); var sel = root.querySelector('input[name="timing-basis"]:checked'); var basis = sel ? sel.value : 'expected'; var cal = calendar(); var t = today(); var P = null;if (basis === 'expected') { P = parseDate(gid('hcg-expected-period').value); if (!P) return showError('Please enter your expected next period date.'); if (diffDays(t, P) > 120) return showError('That date is too far in the future. Please check the date you entered.'); } else { var lmp = parseDate(gid('hcg-lmp').value); if (!lmp) return showError('Please enter the first day of your last period.'); if (lmp > t) return showError('Your last period date cannot be in the future.'); var cyc = parseInt(normDigits(gid('hcg-cycle').value), 10) || 28; cyc = Math.min(60, Math.max(15, cyc)); P = addDays(lmp, cyc); }var d = diffDays(t, P); // > 0 means the expected date is in the future var headT, desc; if (d <= 0) { var late = -d; headT = 'Yes, now is the right time'; desc = late === 0 ? 'Today is your expected period date, which is the best time to take a pregnancy test.' : 'You can take a pregnancy test now. Your period is ' + daysEn(late) + ' late.'; } else { headT = 'Not yet'; desc = 'Take the pregnancy test on ' + fmtDate(P, cal) + ' (' + daysEn(d) + ' from now).'; }var parts = []; parts.push(rHead('Pregnancy test timing', headT)); parts.push(rSection('Result', '

' + desc + '

')); parts.push(rFine());var sp = new URLSearchParams(); sp.set('hcgm', 'timing'); sp.set('basis', basis); if (basis === 'expected') sp.set('exp', gid('hcg-expected-period').value); else { sp.set('lmp', gid('hcg-lmp').value); sp.set('cyc', gid('hcg-cycle').value || '28'); }lastShare = { url: pageBase() + '?' + sp.toString(), title: 'Pregnancy test timing', lines: [['Result', headT], ['Details', desc]], desc: '', disclaimer: FINE };parts.push(resultFooter()); render(parts.join('')); }/* ---------------- MODE 2: single hCG ---------------- */function calcSingle() { clearError(); var v = parseNum(gid('hcg-single-value').value); if (v === null) return showError('Please enter a valid numeric hCG value.'); if (v < 0) return showError('The hCG value cannot be negative.'); var unit = gid('hcg-single-unit').value;var verdict, desc, next; if (v < 5) { verdict = 'Negative'; desc = 'Your value (' + v + ') is below 5, which usually means no pregnancy.'; next = 'If your period is late, repeat the test in a few days or see your doctor.'; } else if (v <= 25) { verdict = 'Borderline (inconclusive)'; desc = 'Your value (' + v + ') is between 5 and 25, a gray zone that neither confirms nor rules out pregnancy.'; next = 'Repeat the blood test after 48 hours.'; } else { verdict = 'Positive'; desc = 'Your value (' + v + ') is above 25, which indicates pregnancy.'; next = 'See your doctor to start your pregnancy care.'; }var parts = []; parts.push(rHead('Understanding your hCG result', 'Result: ' + verdict)); parts.push(rCards([['hCG value', v + ' ' + unit]])); parts.push(rSection('What does your result mean?', '

' + desc + '

Next step: ' + next + '

')); parts.push(rFine());var sp = new URLSearchParams(); sp.set('hcgm', 'single'); sp.set('v', String(v)); sp.set('u', unit);lastShare = { url: pageBase() + '?' + sp.toString(), title: 'hCG test result', lines: [['Result', verdict], ['hCG value', v + ' ' + unit]], desc: desc + ' Next step: ' + next, disclaimer: FINE };parts.push(resultFooter()); render(parts.join('')); }/* ---------------- shared links ---------------- */function applySharedLink() { var q; try { q = new URLSearchParams(window.location.search); } catch (e) { return; } var m = q.get('hcgm'); if (!m) return;if (m === 'timing') { var basis = q.get('basis'); if (['expected', 'lmp'].indexOf(basis) === -1) basis = 'expected'; var rb = root.querySelector('input[name="timing-basis"][value="' + basis + '"]'); if (rb) rb.checked = true; updateBasis(); if (q.get('exp')) gid('hcg-expected-period').value = q.get('exp'); if (q.get('lmp')) gid('hcg-lmp').value = q.get('lmp'); if (q.get('cyc')) gid('hcg-cycle').value = q.get('cyc'); setMode('timing'); try { calcTiming(); } catch (e) {} } else if (m === 'single') { if (q.get('v')) gid('hcg-single-value').value = q.get('v'); if (q.get('u')) gid('hcg-single-unit').value = q.get('u'); setMode('single'); try { calcSingle(); } catch (e) {} } }/* ---------------- forms + clear ---------------- *//* Calculate buttons use direct click handlers (not form submit), so nothing on the page can swallow the signal. Enter key also works. */ function safeRun(fn) { try { fn(); } catch (err) { showError('An unexpected error occurred. Please refresh the page and try again.'); } } function wireCalc(btnId, formId, fn) { var b = gid(btnId); if (b) b.addEventListener('click', function () { safeRun(fn); }); var f = gid(formId); if (f) f.addEventListener('keydown', function (e) { if (e.key === 'Enter') { e.preventDefault(); safeRun(fn); } }); } wireCalc('hcgcalc-timing-btn', 'hcgcalc-timing-form', calcTiming); wireCalc('hcgcalc-single-btn', 'hcgcalc-single-form', calcSingle);$$('form .hcgcalc-clear-btn', root).forEach(function (btn) { btn.addEventListener('click', function () { var f = btn.closest ? btn.closest('form') : null; if (f) f.reset(); updateBasis(); clearError(); clearResults(); }); });/* ---------------- init ---------------- */applySharedLink();}/* Activate the calculator. If the snippet was pasted more than once, keep only the first copy visible so visitors never see a duplicated calculator. */ var __hcgRoots = document.querySelectorAll('.hcgcalc-ar'); if (__hcgRoots.length > 1) { for (var __di = 1; __di < __hcgRoots.length; __di++) { __hcgRoots[__di].classList.add('hcgcalc-hidden'); } } var __hcgFirst = __hcgRoots.length ? __hcgRoots[0] : document.getElementById('hcgcalc-ar'); if (__hcgFirst) initHcgCalc(__hcgFirst);})();
Pregnancy Test & hCG Calculator

Your result at a glance

Choose what you want to calculate. This tool does not calculate your pregnancy week, pregnancy month, or due date.

Show dates in:

When should I take a pregnancy test?

Choose the option that suits you and enter the date.

Which date do you know?
days

Understanding your hCG result

Enter your blood test result exactly as shown in your lab report.

';var w = null; try { w = window.open('', '_blank'); } catch (e) { w = null; } if (!w) { toast('Could not open the download window. Please allow pop-ups and try again.'); return; } w.document.write(html); w.document.close(); try { w.focus(); } catch (e) {} setTimeout(function () { try { w.print(); } catch (e) {} }, 500); }function wireResultButtons() { var sb = gid('hcgcalc-share-btn'); if (sb) sb.addEventListener('click', shareResults); var pb = gid('hcgcalc-pdf-btn'); if (pb) pb.addEventListener('click', downloadPdf); }/* ---------------- tabs ---------------- */var activeMode = 'timing'; var tabs = $$('.hcgcalc-tab', root); var panels = $$('.hcgcalc-panel', root);function setMode(mode) { tabs.forEach(function (t) { var on = t.getAttribute('data-mode') === mode; t.classList.toggle('active', on); t.setAttribute('aria-selected', on ? 'true' : 'false'); }); activeMode = mode; panels.forEach(function (p) { p.classList.toggle('active', p.getAttribute('data-panel') === mode); }); clearError(); clearResults(); }tabs.forEach(function (tab) { tab.addEventListener('click', function () { setMode(tab.getAttribute('data-mode')); }); });/* ---------------- timing basis cards ---------------- */var basisInputs = $$('input[name="timing-basis"]', root); function updateBasis() { var v = 'expected'; var sel = root.querySelector('input[name="timing-basis"]:checked'); if (sel) v = sel.value; basisInputs.forEach(function (i) { var lab = i.closest ? i.closest('.hcgcalc-choice') : null; if (lab) lab.classList.toggle('active', i.checked); }); $$('[data-timing-fields]', root).forEach(function (el) { el.classList.toggle('hcgcalc-hidden', el.getAttribute('data-timing-fields') !== v); }); } basisInputs.forEach(function (i) { i.addEventListener('change', updateBasis); }); updateBasis();/* ---------------- calendar toggle ---------------- */$$('input[name="hcg-calendar"]', root).forEach(function (i) { i.addEventListener('change', function () { if (resultsBox && !resultsBox.classList.contains('hcgcalc-hidden')) runActive(); }); });function runActive() { try { if (activeMode === 'timing') calcTiming(); else calcSingle(); } catch (e) { showError('An unexpected error occurred. Please refresh the page and try again.'); } }/* ---------------- MODE 1: test timing ---------------- */function calcTiming() { clearError(); var sel = root.querySelector('input[name="timing-basis"]:checked'); var basis = sel ? sel.value : 'expected'; var cal = calendar(); var t = today(); var P = null;if (basis === 'expected') { P = parseDate(gid('hcg-expected-period').value); if (!P) return showError('Please enter your expected next period date.'); if (diffDays(t, P) > 120) return showError('That date is too far in the future. Please check the date you entered.'); } else { var lmp = parseDate(gid('hcg-lmp').value); if (!lmp) return showError('Please enter the first day of your last period.'); if (lmp > t) return showError('Your last period date cannot be in the future.'); var cyc = parseInt(normDigits(gid('hcg-cycle').value), 10) || 28; cyc = Math.min(60, Math.max(15, cyc)); P = addDays(lmp, cyc); }var d = diffDays(t, P); // > 0 means the expected date is in the future var headT, desc; if (d <= 0) { var late = -d; headT = 'Yes, now is the right time'; desc = late === 0 ? 'Today is your expected period date, which is the best time to take a pregnancy test.' : 'You can take a pregnancy test now. Your period is ' + daysEn(late) + ' late.'; } else { headT = 'Not yet'; desc = 'Take the pregnancy test on ' + fmtDate(P, cal) + ' (' + daysEn(d) + ' from now).'; }var parts = []; parts.push(rHead('Pregnancy test timing', headT)); parts.push(rSection('Result', '

' + desc + '

')); parts.push(rFine());var sp = new URLSearchParams(); sp.set('hcgm', 'timing'); sp.set('basis', basis); if (basis === 'expected') sp.set('exp', gid('hcg-expected-period').value); else { sp.set('lmp', gid('hcg-lmp').value); sp.set('cyc', gid('hcg-cycle').value || '28'); }lastShare = { url: pageBase() + '?' + sp.toString(), title: 'Pregnancy test timing', lines: [['Result', headT], ['Details', desc]], desc: '', disclaimer: FINE };parts.push(resultFooter()); render(parts.join('')); }/* ---------------- MODE 2: single hCG ---------------- */function calcSingle() { clearError(); var v = parseNum(gid('hcg-single-value').value); if (v === null) return showError('Please enter a valid numeric hCG value.'); if (v < 0) return showError('The hCG value cannot be negative.'); var unit = gid('hcg-single-unit').value;var verdict, desc, next; if (v < 5) { verdict = 'Negative'; desc = 'Your value (' + v + ') is below 5, which usually means no pregnancy.'; next = 'If your period is late, repeat the test in a few days or see your doctor.'; } else if (v <= 25) { verdict = 'Borderline (inconclusive)'; desc = 'Your value (' + v + ') is between 5 and 25, a gray zone that neither confirms nor rules out pregnancy.'; next = 'Repeat the blood test after 48 hours.'; } else { verdict = 'Positive'; desc = 'Your value (' + v + ') is above 25, which indicates pregnancy.'; next = 'See your doctor to start your pregnancy care.'; }var parts = []; parts.push(rHead('Understanding your hCG result', 'Result: ' + verdict)); parts.push(rCards([['hCG value', v + ' ' + unit]])); parts.push(rSection('What does your result mean?', '

' + desc + '

Next step: ' + next + '

')); parts.push(rFine());var sp = new URLSearchParams(); sp.set('hcgm', 'single'); sp.set('v', String(v)); sp.set('u', unit);lastShare = { url: pageBase() + '?' + sp.toString(), title: 'hCG test result', lines: [['Result', verdict], ['hCG value', v + ' ' + unit]], desc: desc + ' Next step: ' + next, disclaimer: FINE };parts.push(resultFooter()); render(parts.join('')); }/* ---------------- shared links ---------------- */function applySharedLink() { var q; try { q = new URLSearchParams(window.location.search); } catch (e) { return; } var m = q.get('hcgm'); if (!m) return;if (m === 'timing') { var basis = q.get('basis'); if (['expected', 'lmp'].indexOf(basis) === -1) basis = 'expected'; var rb = root.querySelector('input[name="timing-basis"][value="' + basis + '"]'); if (rb) rb.checked = true; updateBasis(); if (q.get('exp')) gid('hcg-expected-period').value = q.get('exp'); if (q.get('lmp')) gid('hcg-lmp').value = q.get('lmp'); if (q.get('cyc')) gid('hcg-cycle').value = q.get('cyc'); setMode('timing'); try { calcTiming(); } catch (e) {} } else if (m === 'single') { if (q.get('v')) gid('hcg-single-value').value = q.get('v'); if (q.get('u')) gid('hcg-single-unit').value = q.get('u'); setMode('single'); try { calcSingle(); } catch (e) {} } }/* ---------------- forms + clear ---------------- *//* Calculate buttons use direct click handlers (not form submit), so nothing on the page can swallow the signal. Enter key also works. */ function safeRun(fn) { try { fn(); } catch (err) { showError('An unexpected error occurred. Please refresh the page and try again.'); } } function wireCalc(btnId, formId, fn) { var b = gid(btnId); if (b) b.addEventListener('click', function () { safeRun(fn); }); var f = gid(formId); if (f) f.addEventListener('keydown', function (e) { if (e.key === 'Enter') { e.preventDefault(); safeRun(fn); } }); } wireCalc('hcgcalc-timing-btn', 'hcgcalc-timing-form', calcTiming); wireCalc('hcgcalc-single-btn', 'hcgcalc-single-form', calcSingle);$$('form .hcgcalc-clear-btn', root).forEach(function (btn) { btn.addEventListener('click', function () { var f = btn.closest ? btn.closest('form') : null; if (f) f.reset(); updateBasis(); clearError(); clearResults(); }); });/* ---------------- init ---------------- */applySharedLink();}/* Activate the calculator. If the snippet was pasted more than once, keep only the first copy visible so visitors never see a duplicated calculator. */ var __hcgRoots = document.querySelectorAll('.hcgcalc-ar'); if (__hcgRoots.length > 1) { for (var __di = 1; __di < __hcgRoots.length; __di++) { __hcgRoots[__di].classList.add('hcgcalc-hidden'); } } var __hcgFirst = __hcgRoots.length ? __hcgRoots[0] : document.getElementById('hcgcalc-ar'); if (__hcgFirst) initHcgCalc(__hcgFirst);})();

Choose one mode:

  • Pregnancy Test Timing : Enter your expected next period date, or the first day of your last period and average cycle length, to see whether it is the right time to use a pregnancy test device and when testing would be most appropriate.
  • Understand Your hCG Result: Enter the value and unit of your quantitative blood hCG test to see whether the result is negative, inconclusive, or positive, with a brief explanation of the next step.
Pregnancy Test and hCG Calculator diagram showing the hCG hormone journey from fertilization and implantation to the home pregnancy test, the blood test, and rising hormone levels

Depending on the selected option, the Pregnancy Test and hCG Calculator shows the appropriate time to take a pregnancy test or your hCG result with a brief explanation and the next step. Results are for guidance only and may be affected by factors such as ovulation timing, implantation, and test sensitivity.

Pregnancy test and hCG calculator diagram showing the best time to take a pregnancy test and explaining the hormone results

The Pregnancy Test and hCG Calculator estimates timing from menstrual-cycle or ovulation information. Pregnancy tests detect hCG in urine or blood. A home pregnancy test may be negative when used too early because hCG has not yet reached the test's detection threshold.
If the test is negative but your period remains absent or pregnancy is still possible, repeat it after several days according to the product instructions. There is no fixed maximum time at which hCG becomes detectable in blood for everyone; detection timing varies with ovulation and implantation.

A home pregnancy test usually checks whether hCG is detectable, while a quantitative blood pregnancy test measures the hormone numerically.
The purpose of a Pregnancy Check Calculator therefore depends on the result you have. If you only want to estimate when to test, use cycle information. If you already have a laboratory number, use the hCG interpretation mode.

To understand how to read a blood pregnancy test (hCG), the Pregnancy Test and hCG Calculator helps place a numerical result in context, but one value alone cannot determine whether a pregnancy is healthy or establish exact gestational age.
MedlinePlus lists less than 5 mIU/mL as a typical non-pregnant level. During pregnancy, however, hCG values vary widely and reference ranges can differ between laboratories.

Take a urine pregnancy test first thing in the morning if possible, when urine is usually more concentrated. You can also take a home pregnancy test in the evening, but testing early with diluted urine may give a false negative.
Read the result only within the time stated in the instructions, not after it; evaporation lines can appear outside the reading window. A faint line appearing within the specified reading time may need confirmation with another test according to the instructions. Check the expiry date before use.
For more from a trusted medical source, see the Mayo Clinic guide to home pregnancy tests.

Testing too early is a common reason. Test sensitivity, urine concentration and incorrect use can also affect the result.
Following the instructions carefully matters, and first-morning urine may help with some home tests because it is usually more concentrated.
The Pregnancy Test Timing Calculator therefore provides an estimated testing window rather than promising a positive result on a specific date.

If you are looking for a Pregnancy Test Result Calculator, first identify whether the test is qualitative or quantitative. A qualitative test usually reports whether hCG was detected, while a quantitative blood test provides a numerical concentration.
You can enter that value in the Pregnancy Test and hCG Calculator for general interpretation, but one value alone cannot confirm pregnancy location or pregnancy health.

Seek medical care if you have a positive pregnancy test with severe pain, significant bleeding, dizziness or fainting, or if your hCG results require clinical follow-up. Assessment may include repeat hCG measurements, examination and ultrasound depending on the situation.
The Pregnancy Test and hCG Calculator does not replace this assessment.

It is an estimating tool that uses menstrual-cycle or ovulation information to suggest when pregnancy testing may be useful, and helps explain a laboratory hCG value. It does not confirm pregnancy by itself; confirmation comes from the actual test and medical assessment when needed.

There is no single normal hCG value for every stage of pregnancy. Levels change substantially during early pregnancy and ranges overlap widely, so a result should be interpreted with gestational age, units, the laboratory reference range and clinical context.

hCG alone cannot tell you the exact number of pregnancy days.
If you want gestational age in weeks and days, use the dedicated pregnancy calculator based on the first day of your last menstrual period or another appropriate dating method.

Standard gestational dating commonly begins with the first day of the last menstrual period. The average pregnancy is about 280 days, or 40 weeks, from that date.
For pregnancy weeks, months and due-date calculations, use the dedicated pregnancy calculator rather than this test/hCG page.

A fixed doubling rule should not be treated as a universal test of pregnancy health. Changes in hCG need to be interpreted with the starting value, time interval, symptoms and other clinical findings.

Repeat the test after several days according to the product instructions. An early test can show a negative result even when pregnancy is possible. Seek medical advice if your period remains absent or concerning symptoms develop.

Yes. You can test in the evening if you follow the device instructions, although first-morning urine may help detect an early pregnancy because it is often more concentrated. Avoid drinking excessive fluids before testing.

A false negative may occur if you test too early or the urine is diluted. A reading taken outside the specified time window, or from an expired test, may also be invalid. Repeat the test as directed or seek medical advice if uncertainty remains.

The Pregnancy Test and hCG Calculator brings pregnancy-test timing and hCG interpretation together without turning one date or laboratory value into a diagnosis. Use the result to understand your information and decide what to do next, not to confirm pregnancy health or rule out a medical problem.
Medical disclaimer: This tool provides general information and estimates only. It does not diagnose pregnancy, miscarriage or ectopic pregnancy and does not replace professional medical assessment.