{"id":2592,"date":"2026-03-05T00:16:11","date_gmt":"2026-03-04T22:16:11","guid":{"rendered":"https:\/\/bio-me.bio\/?page_id=2592"},"modified":"2026-03-06T19:48:28","modified_gmt":"2026-03-06T17:48:28","slug":"uv-exposure-time-calculator","status":"publish","type":"page","link":"https:\/\/bio-me.bio\/?page_id=2592","title":{"rendered":"UV Exposure Time Calculator"},"content":{"rendered":"\n<div class=\"eco-tool wp-block-group\" id=\"eco-tool-uv-b4c91\">\n  <div class=\"eco-tool__header\">\n    <h2 class=\"eco-tool__title\">UV Exposure Time Calculator<\/h2>\n    <p class=\"eco-tool__lead\">\n      Estimate how quickly unprotected skin may start to redden under the sun based on UV Index and skin type. This is an approximate estimate.\n    <\/p>\n  <\/div>\n\n  <form class=\"eco-tool__form\" id=\"eco-uv-form-b4c91\" novalidate>\n    <div class=\"eco-tool__grid3\">\n      <!-- UV Index -->\n      <div class=\"eco-tool__field\">\n        <label class=\"eco-tool__label\" for=\"eco-uv-uvi-b4c91\">UV Index (UVI)<\/label>\n        <input class=\"eco-tool__input\" id=\"eco-uv-uvi-b4c91\" type=\"number\" min=\"0\" step=\"0.1\" value=\"7\" inputmode=\"decimal\" \/>\n        <div class=\"eco-tool__hint\">Typical range: 0\u201311+ (higher = faster burn).<\/div>\n      <\/div>\n\n      <!-- Skin type -->\n      <div class=\"eco-tool__field\">\n        <label class=\"eco-tool__label\" for=\"eco-uv-skin-b4c91\">Skin type (Fitzpatrick)<\/label>\n        <select class=\"eco-tool__input\" id=\"eco-uv-skin-b4c91\">\n          <option value=\"1\">Type I (very fair)<\/option>\n          <option value=\"2\" selected>Type II (fair)<\/option>\n          <option value=\"3\">Type III (medium)<\/option>\n          <option value=\"4\">Type IV (olive)<\/option>\n          <option value=\"5\">Type V (brown)<\/option>\n          <option value=\"6\">Type VI (dark brown\/black)<\/option>\n        <\/select>\n        <div class=\"eco-tool__hint\">Choose the closest match.<\/div>\n      <\/div>\n\n      <!-- Protection -->\n      <div class=\"eco-tool__field\">\n        <label class=\"eco-tool__label\" for=\"eco-uv-protect-b4c91\">Protection level<\/label>\n        <select class=\"eco-tool__input\" id=\"eco-uv-protect-b4c91\">\n          <option value=\"1\" selected>No protection<\/option>\n          <option value=\"1.5\">Light protection (hat\/shade)<\/option>\n          <option value=\"2\">Sunscreen applied well (general)<\/option>\n          <option value=\"3\">Strong protection (sunscreen + shade)<\/option>\n        <\/select>\n        <div class=\"eco-tool__hint\">Protection increases estimated safe time.<\/div>\n      <\/div>\n\n      <!-- Time of day -->\n      <div class=\"eco-tool__field\">\n        <label class=\"eco-tool__label\" for=\"eco-uv-time-b4c91\">Time of day<\/label>\n        <select class=\"eco-tool__input\" id=\"eco-uv-time-b4c91\">\n          <option value=\"1\" selected>Midday (strongest)<\/option>\n          <option value=\"1.2\">Morning \/ late afternoon<\/option>\n          <option value=\"1.4\">Early morning \/ evening<\/option>\n        <\/select>\n        <div class=\"eco-tool__hint\">Midday sun is usually strongest.<\/div>\n      <\/div>\n\n      <!-- Altitude -->\n      <div class=\"eco-tool__field\">\n        <label class=\"eco-tool__label\" for=\"eco-uv-alt-b4c91\">Altitude<\/label>\n        <select class=\"eco-tool__input\" id=\"eco-uv-alt-b4c91\">\n          <option value=\"1\" selected>Sea level<\/option>\n          <option value=\"1.1\">500\u20131000 m<\/option>\n          <option value=\"1.2\">1000\u20132000 m<\/option>\n          <option value=\"1.3\">2000 m+<\/option>\n        <\/select>\n        <div class=\"eco-tool__hint\">Higher altitude increases UV intensity.<\/div>\n      <\/div>\n\n      <!-- Surface -->\n      <div class=\"eco-tool__field\">\n        <label class=\"eco-tool__label\" for=\"eco-uv-surface-b4c91\">Surface reflection<\/label>\n        <select class=\"eco-tool__input\" id=\"eco-uv-surface-b4c91\">\n          <option value=\"1\" selected>Normal (grass\/city)<\/option>\n          <option value=\"1.1\">Water \/ sand<\/option>\n          <option value=\"1.3\">Snow<\/option>\n        <\/select>\n        <div class=\"eco-tool__hint\">Bright surfaces can boost exposure.<\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"eco-tool__actions\">\n      <button type=\"button\" class=\"wp-element-button eco-tool__btn\" id=\"eco-uv-calc-b4c91\">Calculate<\/button>\n      <button type=\"button\" class=\"wp-element-button eco-tool__btn eco-tool__btn--ghost\" id=\"eco-uv-reset-b4c91\">Reset<\/button>\n      <div class=\"eco-tool__error\" id=\"eco-uv-error-b4c91\" aria-live=\"polite\"><\/div>\n    <\/div>\n  <\/form>\n\n  <div class=\"eco-tool__result\" id=\"eco-uv-result-b4c91\" hidden>\n    <h3 class=\"eco-tool__subtitle\">Result<\/h3>\n\n    <div class=\"eco-tool__cards\">\n      <div class=\"eco-tool__card\">\n        <div class=\"eco-tool__metric-label\">Estimated time to skin reddening<\/div>\n        <div class=\"eco-tool__metric-value\" id=\"eco-uv-min-b4c91\">\u2014<\/div>\n        <div class=\"eco-tool__metric-sub\" id=\"eco-uv-range-b4c91\"><\/div>\n      <\/div>\n\n      <div class=\"eco-tool__card\">\n        <div class=\"eco-tool__metric-label\">Exposure risk<\/div>\n        <div class=\"eco-tool__metric-value\" id=\"eco-uv-risk-b4c91\">\u2014<\/div>\n        <div class=\"eco-tool__metric-sub\" id=\"eco-uv-advice-b4c91\"><\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"eco-tool__card eco-tool__card--wide\">\n      <div class=\"eco-tool__metric-label\">What to do next<\/div>\n      <div class=\"eco-tool__metric-sub\" id=\"eco-uv-next-b4c91\"><\/div>\n    <\/div>\n\n    <p class=\"eco-tool__note\">\n      This is not medical advice. Sun sensitivity varies widely. If you burn easily, be extra cautious.\n    <\/p>\n  <\/div>\n\n  <details class=\"eco-tool__details\">\n    <summary class=\"eco-tool__summary\">How we calculate<\/summary>\n    <div class=\"eco-tool__details-body\">\n      <p class=\"eco-tool__text\">\n        We start with a simplified \u201ctime to reddening\u201d baseline by skin type, then adjust using UV Index and modifiers\n        (time of day, altitude, surface reflection, and protection). This is an educational estimate.\n      <\/p>\n      <ul class=\"eco-tool__list\" id=\"eco-uv-factors-b4c91\"><\/ul>\n    <\/div>\n  <\/details>\n<\/div>\n\n<style>\n.eco-tool{\n  border: 1px solid rgba(0,0,0,.12);\n  border-radius: 12px;\n  padding: 16px;\n}\n\n.eco-tool__header{ margin-bottom: 12px; }\n.eco-tool__title{ margin: 0 0 8px; }\n.eco-tool__lead{ margin: 0; opacity: .9; }\n.eco-tool__form{ margin-top: 12px; }\n\n.eco-tool__grid3{\n  display: grid;\n  grid-template-columns: 1fr;\n  gap: 16px;\n}\n@media (min-width: 860px){\n  .eco-tool__grid3{ grid-template-columns: 1fr 1fr 1fr; }\n}\n\n.eco-tool__field{\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n}\n.eco-tool__label{ font-weight: 600; }\n\n.eco-tool__input{\n  width: 100%;\n  height: 44px;\n  padding: 0 12px;\n  border: 1px solid rgba(0,0,0,.20);\n  border-radius: 10px;\n  background: #fff;\n  box-sizing: border-box;\n  font: inherit;\n}\n.eco-tool select.eco-tool__input{\n  appearance: none;\n  -webkit-appearance: none;\n  line-height: 44px;\n  padding-right: 40px;\n  background-image:\n    linear-gradient(45deg, transparent 50%, rgba(0,0,0,.60) 50%),\n    linear-gradient(135deg, rgba(0,0,0,.60) 50%, transparent 50%);\n  background-position:\n    calc(100% - 18px) 50%,\n    calc(100% - 12px) 50%;\n  background-size: 6px 6px;\n  background-repeat: no-repeat;\n}\n\n.eco-tool__hint{\n  font-size: .92em;\n  opacity: .78;\n  min-height: 38px;\n}\n\n.eco-tool__actions{\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  align-items: center;\n  margin-top: 16px;\n}\n\n.eco-tool__btn{ padding: 10px 22px; }\n\n.eco-tool__btn--ghost{\n  background: transparent !important;\n  border: 1px solid rgba(0,0,0,.20) !important;\n}\n.eco-tool__btn--ghost:hover,\n.eco-tool__btn--ghost:focus{\n  background: rgba(0,0,0,.06) !important;\n  border-color: rgba(0,0,0,.35) !important;\n}\n\n.eco-tool__error{\n  min-height: 1.2em;\n  font-weight: 600;\n  flex: 1 1 240px;\n}\n\n.eco-tool__result{ margin-top: 16px; }\n.eco-tool__subtitle{ margin: 0 0 10px; }\n\n.eco-tool__cards{\n  display: grid;\n  gap: 10px;\n  grid-template-columns: 1fr;\n}\n@media (min-width: 860px){\n  .eco-tool__cards{ grid-template-columns: 1fr 1fr; }\n}\n\n.eco-tool__card{\n  border: 1px solid rgba(0,0,0,.12);\n  border-radius: 12px;\n  padding: 12px;\n}\n.eco-tool__card--wide{ margin-top: 10px; }\n\n.eco-tool__metric-label{ opacity: .85; font-weight: 600; }\n.eco-tool__metric-value{ font-size: 1.6em; font-weight: 800; margin-top: 6px; line-height: 1.1; }\n.eco-tool__metric-sub{ opacity: .85; margin-top: 6px; }\n\n.eco-tool__note{ margin: 10px 0 0; opacity: .9; }\n\n.eco-tool__details{ margin-top: 14px; }\n.eco-tool__summary{ cursor: pointer; font-weight: 700; }\n.eco-tool__details-body{ margin-top: 10px; }\n.eco-tool__text{ margin: 0 0 10px; }\n.eco-tool__list{ margin: 0; padding-left: 18px; }\n<\/style>\n\n<script>\n(function(){\n  const S = \"b4c91\";\n  const el = (id) => document.getElementById(id + \"-\" + S);\n\n  const uviEl = el(\"eco-uv-uvi\");\n  const skinEl = el(\"eco-uv-skin\");\n  const protectEl = el(\"eco-uv-protect\");\n  const timeEl = el(\"eco-uv-time\");\n  const altEl = el(\"eco-uv-alt\");\n  const surfaceEl = el(\"eco-uv-surface\");\n\n  const calcBtn = el(\"eco-uv-calc\");\n  const resetBtn = el(\"eco-uv-reset\");\n  const errorEl = el(\"eco-uv-error\");\n\n  const resultEl = el(\"eco-uv-result\");\n  const minEl = el(\"eco-uv-min\");\n  const rangeEl = el(\"eco-uv-range\");\n  const riskEl = el(\"eco-uv-risk\");\n  const adviceEl = el(\"eco-uv-advice\");\n  const nextEl = el(\"eco-uv-next\");\n  const factorsEl = el(\"eco-uv-factors\");\n\n  \/\/ Baseline minutes to mild reddening at UVI=1 (very simplified)\n  const BASE_MIN_AT_UVI1 = {\n    1: 67,  \/\/ very fair\n    2: 100, \/\/ fair\n    3: 150, \/\/ medium\n    4: 200, \/\/ olive\n    5: 250, \/\/ brown\n    6: 300  \/\/ dark\n  };\n\n  function setError(msg){ errorEl.textContent = msg || \"\"; }\n  function clamp(n, a, b){ return Math.max(a, Math.min(b, n)); }\n\n  function fillFactors(){\n    factorsEl.innerHTML = [\n      \"<li><strong>Baseline:<\/strong> skin-type minutes at UVI = 1 (simplified)<\/li>\",\n      \"<li><strong>UV adjustment:<\/strong> time \u2248 baseline \u00f7 UVI<\/li>\",\n      \"<li><strong>Modifiers:<\/strong> time-of-day \u00d7 altitude \u00d7 surface \u00d7 protection<\/li>\",\n      \"<li><strong>Note:<\/strong> wind, clouds, skin moisture, and previous exposure can change results.<\/li>\"\n    ].join(\"\");\n  }\n\n  function fmtMin(m){\n    if (m < 1) return \"<1 minute\";\n    if (m < 60) return `${Math.round(m)} minutes`;\n    const h = Math.floor(m \/ 60);\n    const r = Math.round(m % 60);\n    return `${h}h ${r}m`;\n  }\n\n  function riskBand(minutes){\n    if (minutes <= 10) return { label: \"Very high\", advice: \"Skin may redden quickly.\" };\n    if (minutes <= 20) return { label: \"High\", advice: \"Use protection and limit exposure.\" };\n    if (minutes <= 40) return { label: \"Moderate\", advice: \"Caution recommended, especially midday.\" };\n    return { label: \"Lower\", advice: \"Still possible to burn \u2014 monitor your skin.\" };\n  }\n\n  function nextSteps(minutes){\n    if (minutes <= 10) return \"Seek shade, wear protective clothing, and consider reducing exposure. Reapply sunscreen if used.\";\n    if (minutes <= 20) return \"Use shade and protective clothing; if using sunscreen, apply properly and reapply as needed.\";\n    if (minutes <= 40) return \"Plan breaks in shade and avoid the strongest midday sun when possible.\";\n    return \"Even at lower risk, prolonged exposure can still cause damage\u2014use sun-smart habits.\";\n  }\n\n  function calculate(){\n    setError(\"\");\n\n    const uvi = Number(uviEl.value);\n    if (!Number.isFinite(uvi) || uvi <= 0){\n      setError(\"Please enter a valid UV Index (greater than 0).\");\n      resultEl.hidden = true;\n      return;\n    }\n\n    const skin = Number(skinEl.value);\n    const base = BASE_MIN_AT_UVI1[skin] || 100;\n\n    const protection = Number(protectEl.value);\n    const timeMod = Number(timeEl.value);\n    const altMod = Number(altEl.value);\n    const surfMod = Number(surfaceEl.value);\n\n    \/\/ core estimate\n    let minutes = (base \/ uvi) * protection * timeMod \/ (altMod * surfMod);\n\n    \/\/ sanity clamp (educational)\n    minutes = clamp(minutes, 1, 480);\n\n    \/\/ range (+\/- 25%)\n    const low = clamp(minutes * 0.75, 1, 480);\n    const high = clamp(minutes * 1.25, 1, 480);\n\n    minEl.textContent = fmtMin(minutes);\n    rangeEl.textContent = `Typical range: ${fmtMin(low)} to ${fmtMin(high)} (very rough).`;\n\n    const rb = riskBand(minutes);\n    riskEl.textContent = rb.label;\n    adviceEl.textContent = rb.advice;\n    nextEl.textContent = nextSteps(minutes);\n\n    resultEl.hidden = false;\n  }\n\n  function reset(){\n    setError(\"\");\n    uviEl.value = \"7\";\n    skinEl.value = \"2\";\n    protectEl.value = \"1\";\n    timeEl.value = \"1\";\n    altEl.value = \"1\";\n    surfaceEl.value = \"1\";\n    resultEl.hidden = true;\n  }\n\n  fillFactors();\n  calcBtn.addEventListener(\"click\", calculate);\n  resetBtn.addEventListener(\"click\", reset);\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>UV Exposure Time Calculator Estimate how quickly unprotected skin may start to redden under the sun based on UV Index and skin type. This is an approximate estimate. UV Index&hellip;<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":2452,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_sitemap_exclude":false,"_sitemap_priority":"","_sitemap_frequency":"","footnotes":""},"_links":{"self":[{"href":"https:\/\/bio-me.bio\/index.php?rest_route=\/wp\/v2\/pages\/2592"}],"collection":[{"href":"https:\/\/bio-me.bio\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bio-me.bio\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bio-me.bio\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/bio-me.bio\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2592"}],"version-history":[{"count":1,"href":"https:\/\/bio-me.bio\/index.php?rest_route=\/wp\/v2\/pages\/2592\/revisions"}],"predecessor-version":[{"id":2593,"href":"https:\/\/bio-me.bio\/index.php?rest_route=\/wp\/v2\/pages\/2592\/revisions\/2593"}],"up":[{"embeddable":true,"href":"https:\/\/bio-me.bio\/index.php?rest_route=\/wp\/v2\/pages\/2452"}],"wp:attachment":[{"href":"https:\/\/bio-me.bio\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2592"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}