<br />
<b>Notice</b>:  Function wp_is_block_theme was called <strong>incorrectly</strong>. This function should not be called before the theme directory is registered. Please see <a href="https://developer.wordpress.org/advanced-administration/debug/debug-wordpress/">Debugging in WordPress</a> for more information. (This message was added in version 6.8.0.) in <b>/home/hirt15dedc/domains/hirtshals-kristiansand.com/public_html/wp-includes/functions.php</b> on line <b>6131</b><br />
{"id":51,"date":"2024-03-11T13:20:14","date_gmt":"2024-03-11T13:20:14","guid":{"rendered":"https:\/\/hirtshals-kristiansand.com\/no\/?page_id=51"},"modified":"2026-05-19T11:12:33","modified_gmt":"2026-05-19T11:12:33","slug":"rutetider","status":"publish","type":"page","link":"https:\/\/hirtshals-kristiansand.com\/no\/rutetider\/","title":{"rendered":"Rutetider for Hirtshals-Kristiansand"},"content":{"rendered":"\n<p>Se rutetider for fergen mellom Hirtshals og Kristiansand, b\u00e5de til Norge og Danmark. Color Line og Fjord Line betjener ruten, med avganger som varierer etter sesong og ukedag. Kontroller alltid aktuell avgang f\u00f8r du bestiller, spesielt hvis du reiser med bil, bobil eller campingvogn.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Kristiansand \u27a2 Hirtshals rutetider<\/h2>\n\n\n\n<p class=\"has-small-font-size\">Skal du reise fra Norge til Danmark? Her ser du avganger og ankomsttider fra Kristiansand havn til Hirtshals. Tabellen viser som standard de neste 3 dagene, men du kan selv endre visningen og se avganger opptil 14 dager frem i tid. Dette er den mest relevante retningen for mange norske reisende som skal videre i Danmark, til Tyskland eller lenger s\u00f8rover i Europa.<\/p>\n\n\n<div class=\"tp-wrap\" data-config=\"{&quot;rest&quot;:&quot;https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/wp-json\\\/timetables-pro\\\/v1\\\/timetables&quot;,&quot;routes&quot;:[172],&quot;days&quot;:3,&quot;autoload&quot;:true,&quot;routeLabels&quot;:{&quot;172&quot;:&quot;Kristiansand til Hirtshals&quot;},&quot;opFilter&quot;:[&quot;8&quot;,&quot;27&quot;],&quot;labels&quot;:{&quot;ui_date&quot;:&quot;Dato&quot;,&quot;ui_days&quot;:&quot;Dager&quot;,&quot;ui_button&quot;:&quot;Vis avganger&quot;,&quot;status_idle&quot;:&quot;Velg en dato og klikk p\\u00e5 Vis avganger&quot;,&quot;status_loading&quot;:&quot;Laster&quot;,&quot;status_empty&quot;:&quot;Ingen avganger funnet&quot;,&quot;status_found&quot;:&quot;%d avganger funnet&quot;,&quot;th_date&quot;:&quot;Dato&quot;,&quot;th_dep&quot;:&quot;Avgang&quot;,&quot;th_arr&quot;:&quot;Ankomst&quot;,&quot;th_dur&quot;:&quot;Varighet&quot;,&quot;th_ship&quot;:&quot;Skip&quot;,&quot;th_op&quot;:&quot;Operat\\u00f8r&quot;,&quot;th_route&quot;:&quot;Rute&quot;,&quot;wd_sun&quot;:&quot;S\\u00d8N&quot;,&quot;wd_mon&quot;:&quot;MAN&quot;,&quot;wd_tue&quot;:&quot;TIR&quot;,&quot;wd_wed&quot;:&quot;ONS&quot;,&quot;wd_thu&quot;:&quot;TOR&quot;,&quot;wd_fri&quot;:&quot;FRE&quot;,&quot;wd_sat&quot;:&quot;L\\u00d8R&quot;,&quot;summary_footer_one&quot;:&quot;\\u00bb Sjekk alle %s avganger i rutetabellen v\\u00e5r&quot;,&quot;summary_footer_two&quot;:&quot;\\u00bb Sjekk flere avganger mellom %1$s og %2$s i rutetabellen v\\u00e5r&quot;,&quot;summary_footer_generic&quot;:&quot;Sjekk rutetabellen v\\u00e5r for flere avganger&quot;,&quot;summary_header&quot;:&quot;De neste to avgangene&quot;,&quot;summary_no_upcoming&quot;:&quot;Ingen kommende avganger funnet&quot;,&quot;more_link&quot;:&quot;Flere avganger&quot;},&quot;showLogo&quot;:true,&quot;title&quot;:&quot;Alle avganger&quot;,&quot;shipMap&quot;:[],&quot;shipLinks&quot;:{&quot;bf&quot;:&quot;https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/ms-bergensfjord\\\/&quot;,&quot;superspeed 1&quot;:&quot;https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/color-line-superspeed-1\\\/&quot;},&quot;showShip&quot;:true}\">\n  <div class=\"tp-controls\" role=\"group\" aria-label=\"Timetable controls\">\n    <div>\n      <label for=\"tp-date-ops\">Dato<\/label><br>\n      <input id=\"tp-date-ops\" class=\"tp-date\" type=\"date\" aria-label=\"Dato\">\n    <\/div>\n    <div>\n      <label for=\"tp-range-ops\">Dager<\/label><br>\n      <select id=\"tp-range-ops\" class=\"tp-range\" aria-label=\"Dager\">\n        <option value=\"1\">1<\/option><option value=\"3\">3<\/option><option value=\"7\">7<\/option><option value=\"14\">14<\/option>\n      <\/select>\n    <\/div>\n    <div><button id=\"tp-load-ops\" class=\"tp-btn\">Vis avganger<\/button><\/div>\n  <\/div>\n\n      <h3 style=\"margin:8px 0 12px;color:#0f172a;\">Alle avganger<\/h3>\n  \n  <div id=\"tp-status-ops\" class=\"tp-muted\" aria-live=\"polite\">Velg en dato og klikk p\u00e5 Vis avganger<\/div>\n\n  <div id=\"tp-ops-results\"><\/div>\n\n  <div class=\"tp-loader\" aria-hidden=\"true\">\n    <div class=\"tp-loader-card\">\n      <div class=\"tp-spinner\" aria-hidden=\"true\"><\/div>\n      <div class=\"tp-loader-text\">Laster<\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  const wrap   = document.currentScript.previousElementSibling;\n  const cfg    = JSON.parse(wrap.getAttribute('data-config')||'{}');\n  const L      = cfg.labels||{};\n  const dateEl = wrap.querySelector('#tp-date-ops');\n  const daysEl = wrap.querySelector('#tp-range-ops');\n  const btn    = wrap.querySelector('#tp-load-ops');\n  const status = wrap.querySelector('#tp-status-ops');\n  const out    = wrap.querySelector('#tp-ops-results');\n  const loader = wrap.querySelector('.tp-loader');\n\n  const showShip = (cfg.showShip !== false && cfg.showShip !== 0 && cfg.showShip !== '0');\n\n  dateEl.valueAsDate = new Date();\n  Array.from(daysEl.options).forEach(o=>{ if(parseInt(o.value,10)===parseInt(cfg.days||7,10)) o.selected=true; });\n\n  function pad(n){ return String(n).padStart(2,'0'); }\n  function iso(d){ return d.getFullYear()+'-'+pad(d.getMonth()+1)+'-'+pad(d.getDate()); }\n  function toLocal(s){ return new Date(s); }\n  function hhmm(d){ return d.toLocaleTimeString([], {hour:'2-digit', minute:'2-digit'}); }\n  function dShort(d){ return d.toLocaleDateString([], {day:'numeric', month:'short'}); }\n  function dur(m){ const h=Math.floor(m\/60), r=m%60; return r? (h+'h '+r+'m') : (h+'h'); }\n\n  const WD = [\n    L.wd_sun || 'SUN',\n    L.wd_mon || 'MON',\n    L.wd_tue || 'TUE',\n    L.wd_wed || 'WED',\n    L.wd_thu || 'THU',\n    L.wd_fri || 'FRI',\n    L.wd_sat || 'SAT'\n  ];\n\n  function setLoader(v){ loader.classList.toggle('show', !!v); loader.setAttribute('aria-hidden', v?'false':'true'); }\n\n  function opCell(r){\n    const name = r.opName || ('Operator '+(r.opId||''));\n    const logo = (cfg.showLogo && r.opLogo) ? '<img decoding=\"async\" src=\"'+r.opLogo+'\" alt=\"'+name+'\"> ' : '';\n    const label = logo + '<span>'+name+'<\/span>';\n    return r.opLink ? '<a class=\"tp-op\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+label+'<\/a>' : '<span class=\"tp-op\">'+label+'<\/span>';\n  }\n\n  function shipInfo(original){\n    const key = (original||'').toLowerCase().trim();\n    const label = (cfg.shipMap && cfg.shipMap[key]) || original || '';\n    const href  = (cfg.shipLinks && cfg.shipLinks[key]) || '';\n    return {label, href};\n  }\n\n  function shipBadge(original){\n    const s = shipInfo(original);\n    const badge = '<span class=\"tp-badge\">'+(s.label||'')+'<\/span>';\n    return s.href ? ('<a href=\"'+s.href+'\" target=\"_blank\" rel=\"nofollow noopener\">'+badge+'<\/a>') : badge;\n  }\n\n  function routeLabel(rid){\n    return (cfg.routeLabels && (cfg.routeLabels[String(rid)] || cfg.routeLabels[rid])) || String(rid);\n  }\n\n  function renderTable(rows){\n    const th = {date:L.th_date,dep:L.th_dep,arr:L.th_arr,dur:L.th_dur,ship:L.th_ship,route:L.th_route,op:L.th_op};\n\n    const headCells = [\n      '<th>'+th.date+'<\/th>',\n      '<th>'+th.dep+'<\/th>',\n      '<th>'+th.arr+'<\/th>',\n      '<th>'+th.dur+'<\/th>'\n    ];\n    if (showShip) {\n      headCells.push('<th>'+th.ship+'<\/th>');\n    }\n    headCells.push('<th>'+th.route+'<\/th>');\n    headCells.push('<th>'+th.op+'<\/th>');\n\n    let html = '<table class=\"tp-table\"><thead><tr>'+headCells.join('')+'<\/tr><\/thead><tbody>';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const cells = [\n        '<td>'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span><\/td>',\n        '<td>'+hhmm(r.dep)+'<\/td>',\n        '<td>'+hhmm(r.arr)+'<\/td>',\n        '<td>'+dur(r.min)+'<\/td>'\n      ];\n      if (showShip) {\n        cells.push('<td>'+shipBadge(r.ship)+'<\/td>');\n      }\n      cells.push('<td>'+routeLabel(r.routeId)+'<\/td>');\n      cells.push('<td>'+opCell(r)+'<\/td>');\n      html += '<tr>'+cells.join('')+'<\/tr>';\n    });\n    html += '<\/tbody><\/table>';\n    return html;\n  }\n\n  function renderCards(rows){\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow   = WD[r.dep.getDay()] || '';\n      const times = hhmm(r.dep) + ' <span class=\"tp-arrow\">\u2192<\/span> ' + hhmm(r.arr);\n      html += '<div class=\"tp-card\">'+\n        \/\/ Row 1: Date + weekday + times\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\"><span class=\"tp-sub\">'+dShort(r.dep)+'<\/span><span class=\"tp-day\">'+dow+'<\/span><\/div>'+\n          '<div class=\"rhs\"><span class=\"tp-time\">'+times+'<\/span><\/div>'+\n        '<\/div>';\n\n      if (showShip) {\n        html +=\n        \/\/ Row 2: Ship & Route\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+shipBadge(r.ship)+'<\/div>'+\n          '<div class=\"rhs\">'+routeLabel(r.routeId)+'<\/div>'+\n        '<\/div>';\n      } else {\n        \/\/ Alleen route, geen ship\n        html +=\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\"><\/div>'+\n          '<div class=\"rhs\">'+routeLabel(r.routeId)+'<\/div>'+\n        '<\/div>';\n      }\n\n      html +=\n        \/\/ Row 3: Operator\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+opCell(r)+'<\/div>'+\n          '<div class=\"rhs\"><\/div>'+\n        '<\/div>'+\n      '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  \/\/ Safe fetch helper\n  async function fetchOne(routeId, from, to){\n    try{\n      const url = new URL(cfg.rest);\n      url.searchParams.set('route', String(routeId));\n      url.searchParams.set('from', from);\n      url.searchParams.set('to', to);\n      const res = await fetch(url.toString(), {credentials:'same-origin'});\n      if(!res.ok) return { rid: routeId, error: 'HTTP '+res.status };\n      const json = await res.json();\n      const list = (json && json.data && Array.isArray(json.data.rows)) ? json.data.rows : [];\n      return { rid: routeId, rows: list };\n    }catch(e){\n      return { rid: routeId, error: String(e && e.message ? e.message : e) };\n    }\n  }\n\n  async function load(){\n    btn.disabled = true; setLoader(true); status.textContent = L.status_loading;\n\n    const start = new Date(dateEl.value || new Date());\n    const days  = Math.max(1, parseInt(daysEl.value,10)||1);\n    const end   = new Date(start); end.setDate(start.getDate()+days-1);\n    const fromIso = iso(start), toIso = iso(end);\n\n    try{\n      const results  = await Promise.all((cfg.routes||[]).map(rid=>fetchOne(rid, fromIso, toIso)));\n      const oks  = results.filter(r => !r.error);\n      const errs = results.filter(r =>  r.error);\n\n      const all = [];\n      oks.forEach(({rid, rows})=>{\n        rows.forEach(t=>{\n          all.push({\n            routeId: rid,\n            opId: t.operatorId || null,\n            opName: t.operatorName || '',\n            opLogo: t.operatorLogo || '',\n            opLink: t.operatorLink || '',\n            dep: toLocal(t.departureTime),\n            arr: toLocal(t.arrivalTime),\n            min: t.durationInMinutes || 0,\n            ship: t.shipName || ''\n          });\n        });\n      });\n\n      let rows = all;\n      if (Array.isArray(cfg.opFilter) && cfg.opFilter.length>0) {\n        rows = all.filter(r => r.opId && cfg.opFilter.includes(String(r.opId)));\n      }\n\n      rows.sort((a,b)=> a.dep - b.dep);\n\n      const total = rows.length;\n      if (total===0){\n        status.textContent = L.status_empty + (errs.length ? ' (some routes returned no data or errors)' : '');\n        out.innerHTML='';\n        setLoader(false); btn.disabled=false; return;\n      }\n\n      status.textContent = (L.status_found||'%d sailings found').replace('%d', total) + (errs.length ? ` (skipped ${errs.length} route${errs.length>1?'s':''})` : '');\n      out.innerHTML = renderTable(rows) + renderCards(rows);\n\n    } catch(e){\n      status.textContent = 'Failed to load data';\n      out.innerHTML = '<pre>'+String(e.message||e)+'<\/pre>';\n    } finally {\n      setLoader(false);\n      btn.disabled = false;\n    }\n  }\n\n  btn.addEventListener('click', load);\n  if (cfg.autoload) load();\n})();\n<\/script>\n\n\n\n\n    <div class=\"fh-drive-tool\">\r\n        <h3>Beregn n\u00e5r du ankommer havnen i Hirtshals fra Norge<\/h3>\r\n        <p class=\"fh-text\">\r\n            Det kan v\u00e6re smart \u00e5 bruke verkt\u00f8yet nedenfor. Velg hvor du reiser fra, hvilken dag og tidspunkt du drar, og se omtrent n\u00e5r du sannsynligvis ankommer havnen i Hirtshals. P\u00e5 den m\u00e5ten kan du velge en ferge som passer godt med planene dine.\r\n        <\/p>\r\n\r\n        <div class=\"fh-field\">\r\n            <label for=\"fh_place\">Avreisested<\/label>\r\n            <select id=\"fh_place\">\r\n                <option value=\"oslo\" selected>Oslo<\/option>\r\n                <option value=\"kristiansand\">Kristiansand<\/option>\r\n                <option value=\"stavanger\">Stavanger<\/option>\r\n                <option value=\"bergen\">Bergen<\/option>\r\n                <option value=\"larvik\">Larvik<\/option>\r\n                <option value=\"sandefjord\">Sandefjord<\/option>\r\n                <option value=\"porsgrunn\">Porsgrunn<\/option>\r\n                <option value=\"drammen\">Drammen<\/option>\r\n            <\/select>\r\n        <\/div>\r\n\r\n        <div class=\"fh-row\">\r\n            <div class=\"fh-field\">\r\n                <label for=\"fh_day\">Avreisedag<\/label>\r\n                <select id=\"fh_day\">\r\n                    <option value=\"1\">Mandag<\/option>\r\n                    <option value=\"2\">Tirsdag<\/option>\r\n                    <option value=\"3\">Onsdag<\/option>\r\n                    <option value=\"4\">Torsdag<\/option>\r\n                    <option value=\"5\">Fredag<\/option>\r\n                    <option value=\"6\">L\u00f8rdag<\/option>\r\n                    <option value=\"0\">S\u00f8ndag<\/option>\r\n                <\/select>\r\n            <\/div>\r\n\r\n            <div class=\"fh-field\">\r\n                <label for=\"fh_time\">Avgangstid<\/label>\r\n                <input type=\"time\" id=\"fh_time\" value=\"06:30\">\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"fh-field\">\r\n            <button type=\"button\" id=\"fh_calc\">Beregn ankomsttid<\/button>\r\n        <\/div>\r\n\r\n        <div id=\"fh_result\"><\/div>\r\n    <\/div>\r\n\r\n    <style>\r\n    .fh-drive-tool {\r\n        background: #f0f5fa;\r\n        padding: 26px 28px;\r\n        border-radius: 10px;\r\n    }\r\n\r\n    .fh-drive-tool h3 {\r\n        margin-bottom: 10px;\r\n    }\r\n\r\n    .fh-drive-tool .fh-text {\r\n        font-size: 0.95em;\r\n        margin-bottom: 20px;\r\n        line-height: 1.6;\r\n    }\r\n\r\n    .fh-drive-tool .fh-field {\r\n        margin-bottom: 18px;\r\n    }\r\n\r\n    .fh-drive-tool .fh-row {\r\n        display: flex;\r\n        gap: 14px;\r\n        align-items: flex-end;\r\n    }\r\n\r\n    .fh-drive-tool .fh-row .fh-field {\r\n        width: 50%;\r\n        display: flex;\r\n        flex-direction: column;\r\n    }\r\n\r\n    .fh-drive-tool button {\r\n        width: 100%;\r\n        padding: 16px 0;\r\n    }\r\n\r\n    .fh-drive-tool #fh_result {\r\n        margin-top: 20px;\r\n        font-size: 0.95em;\r\n        line-height: 1.6;\r\n    }\r\n\r\n    .fh-drive-tool #fh_result strong {\r\n        font-size: 1.05em;\r\n    }\r\n\r\n    @media (max-width: 767px) {\r\n        .fh-drive-tool .fh-row {\r\n            display: block;\r\n        }\r\n\r\n        .fh-drive-tool .fh-row .fh-field {\r\n            width: 100%;\r\n        }\r\n    }\r\n    <\/style>\r\n\r\n    <script>\r\n    document.addEventListener('DOMContentLoaded', function () {\r\n        var placeEl = document.getElementById('fh_place');\r\n        var dayEl = document.getElementById('fh_day');\r\n        var timeEl = document.getElementById('fh_time');\r\n        var calcEl = document.getElementById('fh_calc');\r\n        var resultEl = document.getElementById('fh_result');\r\n\r\n        if (!placeEl) return;\r\n\r\n        var baseMinutes = {\r\n            oslo: 265,\r\n            kristiansand: 180,\r\n            stavanger: 370,\r\n            bergen: 510,\r\n            larvik: 155,\r\n            sandefjord: 170,\r\n            porsgrunn: 140,\r\n            drammen: 220\r\n        };\r\n\r\n        function pad(n){ return String(n).padStart(2,'0'); }\r\n\r\n        function minutesToText(total){\r\n            var h = Math.floor(total \/ 60);\r\n            var m = total % 60;\r\n            return m === 0 ? h + ' timer' : h + ' timer og ' + m + ' minutter';\r\n        }\r\n\r\n        function getTrafficExtra(day, minutes, place){\r\n            var extra = 0;\r\n            var isWeekday = day >= 1 && day <= 5;\r\n\r\n            if (isWeekday){\r\n                if (minutes >= 360 && minutes < 570) extra += 25;\r\n                if (minutes >= 900 && minutes < 1080) extra += 15;\r\n            }\r\n\r\n            if (['oslo','drammen','kristiansand'].includes(place) && isWeekday && minutes < 600){\r\n                extra += 10;\r\n            }\r\n\r\n            return Math.max(0, extra);\r\n        }\r\n\r\n        function formatArrival(time, drive){\r\n            var parts = time.split(':');\r\n            var total = (parseInt(parts[0])*60 + parseInt(parts[1]) + drive) % 1440;\r\n            return pad(Math.floor(total\/60)) + ':' + pad(total%60);\r\n        }\r\n\r\n        calcEl.addEventListener('click', function(){\r\n            var place = placeEl.value;\r\n            var day = parseInt(dayEl.value,10);\r\n            var time = timeEl.value;\r\n\r\n            if (!time){\r\n                resultEl.innerHTML = 'Velg f\u00f8rst et avgangstidspunkt.';\r\n                return;\r\n            }\r\n\r\n            var minutes = (parseInt(time.split(':')[0])*60 + parseInt(time.split(':')[1]));\r\n            var total = baseMinutes[place] + getTrafficExtra(day, minutes, place);\r\n            var arrival = formatArrival(time, total);\r\n\r\n            resultEl.innerHTML =\r\n                '<p><strong>Forventet ankomsttid til havnen i Hirtshals: ' + arrival + '<\/strong><br>' +\r\n                'Reisetiden er omtrent ' + minutesToText(total) + '. Denne beregningen tar hensyn til trafikk, rushtid, ukedager og mulige forsinkelser.<\/p>';\r\n        });\r\n    });\r\n    <\/script>\r\n    \n\n\n\n<h2 class=\"wp-block-heading\">Hirtshals \u27a2 Kristiansand rutetider<\/h2>\n\n\n\n<p class=\"has-small-font-size\">Skal du reise tilbake til Norge? Her ser du avganger og ankomsttider fra Hirtshals havn til Kristiansand. Tabellen viser som standard de neste <strong>3 dagene<\/strong>, men du kan selv endre visningen og se avganger opptil 14 dager frem i tid. P\u00e5 travle reisedager kan enkelte avganger bli utsolgt, spesielt for bil, bobil og campingvogn.<\/p>\n\n\n<div class=\"tp-wrap\" data-config=\"{&quot;rest&quot;:&quot;https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/wp-json\\\/timetables-pro\\\/v1\\\/timetables&quot;,&quot;routes&quot;:[171],&quot;days&quot;:3,&quot;autoload&quot;:true,&quot;routeLabels&quot;:{&quot;171&quot;:&quot;Hirtshals til Kristiansand&quot;},&quot;opFilter&quot;:[&quot;8&quot;,&quot;27&quot;],&quot;labels&quot;:{&quot;ui_date&quot;:&quot;Dato&quot;,&quot;ui_days&quot;:&quot;Dager&quot;,&quot;ui_button&quot;:&quot;Vis avganger&quot;,&quot;status_idle&quot;:&quot;Velg en dato og klikk p\\u00e5 Vis avganger&quot;,&quot;status_loading&quot;:&quot;Laster&quot;,&quot;status_empty&quot;:&quot;Ingen avganger funnet&quot;,&quot;status_found&quot;:&quot;%d avganger funnet&quot;,&quot;th_date&quot;:&quot;Dato&quot;,&quot;th_dep&quot;:&quot;Avgang&quot;,&quot;th_arr&quot;:&quot;Ankomst&quot;,&quot;th_dur&quot;:&quot;Varighet&quot;,&quot;th_ship&quot;:&quot;Skip&quot;,&quot;th_op&quot;:&quot;Operat\\u00f8r&quot;,&quot;th_route&quot;:&quot;Rute&quot;,&quot;wd_sun&quot;:&quot;S\\u00d8N&quot;,&quot;wd_mon&quot;:&quot;MAN&quot;,&quot;wd_tue&quot;:&quot;TIR&quot;,&quot;wd_wed&quot;:&quot;ONS&quot;,&quot;wd_thu&quot;:&quot;TOR&quot;,&quot;wd_fri&quot;:&quot;FRE&quot;,&quot;wd_sat&quot;:&quot;L\\u00d8R&quot;,&quot;summary_footer_one&quot;:&quot;\\u00bb Sjekk alle %s avganger i rutetabellen v\\u00e5r&quot;,&quot;summary_footer_two&quot;:&quot;\\u00bb Sjekk flere avganger mellom %1$s og %2$s i rutetabellen v\\u00e5r&quot;,&quot;summary_footer_generic&quot;:&quot;Sjekk rutetabellen v\\u00e5r for flere avganger&quot;,&quot;summary_header&quot;:&quot;De neste to avgangene&quot;,&quot;summary_no_upcoming&quot;:&quot;Ingen kommende avganger funnet&quot;,&quot;more_link&quot;:&quot;Flere avganger&quot;},&quot;showLogo&quot;:true,&quot;title&quot;:&quot;Alle avganger&quot;,&quot;shipMap&quot;:[],&quot;shipLinks&quot;:{&quot;bf&quot;:&quot;https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/ms-bergensfjord\\\/&quot;,&quot;superspeed 1&quot;:&quot;https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/color-line-superspeed-1\\\/&quot;},&quot;showShip&quot;:true}\">\n  <div class=\"tp-controls\" role=\"group\" aria-label=\"Timetable controls\">\n    <div>\n      <label for=\"tp-date-ops\">Dato<\/label><br>\n      <input id=\"tp-date-ops\" class=\"tp-date\" type=\"date\" aria-label=\"Dato\">\n    <\/div>\n    <div>\n      <label for=\"tp-range-ops\">Dager<\/label><br>\n      <select id=\"tp-range-ops\" class=\"tp-range\" aria-label=\"Dager\">\n        <option value=\"1\">1<\/option><option value=\"3\">3<\/option><option value=\"7\">7<\/option><option value=\"14\">14<\/option>\n      <\/select>\n    <\/div>\n    <div><button id=\"tp-load-ops\" class=\"tp-btn\">Vis avganger<\/button><\/div>\n  <\/div>\n\n      <h3 style=\"margin:8px 0 12px;color:#0f172a;\">Alle avganger<\/h3>\n  \n  <div id=\"tp-status-ops\" class=\"tp-muted\" aria-live=\"polite\">Velg en dato og klikk p\u00e5 Vis avganger<\/div>\n\n  <div id=\"tp-ops-results\"><\/div>\n\n  <div class=\"tp-loader\" aria-hidden=\"true\">\n    <div class=\"tp-loader-card\">\n      <div class=\"tp-spinner\" aria-hidden=\"true\"><\/div>\n      <div class=\"tp-loader-text\">Laster<\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  const wrap   = document.currentScript.previousElementSibling;\n  const cfg    = JSON.parse(wrap.getAttribute('data-config')||'{}');\n  const L      = cfg.labels||{};\n  const dateEl = wrap.querySelector('#tp-date-ops');\n  const daysEl = wrap.querySelector('#tp-range-ops');\n  const btn    = wrap.querySelector('#tp-load-ops');\n  const status = wrap.querySelector('#tp-status-ops');\n  const out    = wrap.querySelector('#tp-ops-results');\n  const loader = wrap.querySelector('.tp-loader');\n\n  const showShip = (cfg.showShip !== false && cfg.showShip !== 0 && cfg.showShip !== '0');\n\n  dateEl.valueAsDate = new Date();\n  Array.from(daysEl.options).forEach(o=>{ if(parseInt(o.value,10)===parseInt(cfg.days||7,10)) o.selected=true; });\n\n  function pad(n){ return String(n).padStart(2,'0'); }\n  function iso(d){ return d.getFullYear()+'-'+pad(d.getMonth()+1)+'-'+pad(d.getDate()); }\n  function toLocal(s){ return new Date(s); }\n  function hhmm(d){ return d.toLocaleTimeString([], {hour:'2-digit', minute:'2-digit'}); }\n  function dShort(d){ return d.toLocaleDateString([], {day:'numeric', month:'short'}); }\n  function dur(m){ const h=Math.floor(m\/60), r=m%60; return r? (h+'h '+r+'m') : (h+'h'); }\n\n  const WD = [\n    L.wd_sun || 'SUN',\n    L.wd_mon || 'MON',\n    L.wd_tue || 'TUE',\n    L.wd_wed || 'WED',\n    L.wd_thu || 'THU',\n    L.wd_fri || 'FRI',\n    L.wd_sat || 'SAT'\n  ];\n\n  function setLoader(v){ loader.classList.toggle('show', !!v); loader.setAttribute('aria-hidden', v?'false':'true'); }\n\n  function opCell(r){\n    const name = r.opName || ('Operator '+(r.opId||''));\n    const logo = (cfg.showLogo && r.opLogo) ? '<img decoding=\"async\" src=\"'+r.opLogo+'\" alt=\"'+name+'\"> ' : '';\n    const label = logo + '<span>'+name+'<\/span>';\n    return r.opLink ? '<a class=\"tp-op\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+label+'<\/a>' : '<span class=\"tp-op\">'+label+'<\/span>';\n  }\n\n  function shipInfo(original){\n    const key = (original||'').toLowerCase().trim();\n    const label = (cfg.shipMap && cfg.shipMap[key]) || original || '';\n    const href  = (cfg.shipLinks && cfg.shipLinks[key]) || '';\n    return {label, href};\n  }\n\n  function shipBadge(original){\n    const s = shipInfo(original);\n    const badge = '<span class=\"tp-badge\">'+(s.label||'')+'<\/span>';\n    return s.href ? ('<a href=\"'+s.href+'\" target=\"_blank\" rel=\"nofollow noopener\">'+badge+'<\/a>') : badge;\n  }\n\n  function routeLabel(rid){\n    return (cfg.routeLabels && (cfg.routeLabels[String(rid)] || cfg.routeLabels[rid])) || String(rid);\n  }\n\n  function renderTable(rows){\n    const th = {date:L.th_date,dep:L.th_dep,arr:L.th_arr,dur:L.th_dur,ship:L.th_ship,route:L.th_route,op:L.th_op};\n\n    const headCells = [\n      '<th>'+th.date+'<\/th>',\n      '<th>'+th.dep+'<\/th>',\n      '<th>'+th.arr+'<\/th>',\n      '<th>'+th.dur+'<\/th>'\n    ];\n    if (showShip) {\n      headCells.push('<th>'+th.ship+'<\/th>');\n    }\n    headCells.push('<th>'+th.route+'<\/th>');\n    headCells.push('<th>'+th.op+'<\/th>');\n\n    let html = '<table class=\"tp-table\"><thead><tr>'+headCells.join('')+'<\/tr><\/thead><tbody>';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      const cells = [\n        '<td>'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span><\/td>',\n        '<td>'+hhmm(r.dep)+'<\/td>',\n        '<td>'+hhmm(r.arr)+'<\/td>',\n        '<td>'+dur(r.min)+'<\/td>'\n      ];\n      if (showShip) {\n        cells.push('<td>'+shipBadge(r.ship)+'<\/td>');\n      }\n      cells.push('<td>'+routeLabel(r.routeId)+'<\/td>');\n      cells.push('<td>'+opCell(r)+'<\/td>');\n      html += '<tr>'+cells.join('')+'<\/tr>';\n    });\n    html += '<\/tbody><\/table>';\n    return html;\n  }\n\n  function renderCards(rows){\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow   = WD[r.dep.getDay()] || '';\n      const times = hhmm(r.dep) + ' <span class=\"tp-arrow\">\u2192<\/span> ' + hhmm(r.arr);\n      html += '<div class=\"tp-card\">'+\n        \/\/ Row 1: Date + weekday + times\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\"><span class=\"tp-sub\">'+dShort(r.dep)+'<\/span><span class=\"tp-day\">'+dow+'<\/span><\/div>'+\n          '<div class=\"rhs\"><span class=\"tp-time\">'+times+'<\/span><\/div>'+\n        '<\/div>';\n\n      if (showShip) {\n        html +=\n        \/\/ Row 2: Ship & Route\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+shipBadge(r.ship)+'<\/div>'+\n          '<div class=\"rhs\">'+routeLabel(r.routeId)+'<\/div>'+\n        '<\/div>';\n      } else {\n        \/\/ Alleen route, geen ship\n        html +=\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\"><\/div>'+\n          '<div class=\"rhs\">'+routeLabel(r.routeId)+'<\/div>'+\n        '<\/div>';\n      }\n\n      html +=\n        \/\/ Row 3: Operator\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+opCell(r)+'<\/div>'+\n          '<div class=\"rhs\"><\/div>'+\n        '<\/div>'+\n      '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  \/\/ Safe fetch helper\n  async function fetchOne(routeId, from, to){\n    try{\n      const url = new URL(cfg.rest);\n      url.searchParams.set('route', String(routeId));\n      url.searchParams.set('from', from);\n      url.searchParams.set('to', to);\n      const res = await fetch(url.toString(), {credentials:'same-origin'});\n      if(!res.ok) return { rid: routeId, error: 'HTTP '+res.status };\n      const json = await res.json();\n      const list = (json && json.data && Array.isArray(json.data.rows)) ? json.data.rows : [];\n      return { rid: routeId, rows: list };\n    }catch(e){\n      return { rid: routeId, error: String(e && e.message ? e.message : e) };\n    }\n  }\n\n  async function load(){\n    btn.disabled = true; setLoader(true); status.textContent = L.status_loading;\n\n    const start = new Date(dateEl.value || new Date());\n    const days  = Math.max(1, parseInt(daysEl.value,10)||1);\n    const end   = new Date(start); end.setDate(start.getDate()+days-1);\n    const fromIso = iso(start), toIso = iso(end);\n\n    try{\n      const results  = await Promise.all((cfg.routes||[]).map(rid=>fetchOne(rid, fromIso, toIso)));\n      const oks  = results.filter(r => !r.error);\n      const errs = results.filter(r =>  r.error);\n\n      const all = [];\n      oks.forEach(({rid, rows})=>{\n        rows.forEach(t=>{\n          all.push({\n            routeId: rid,\n            opId: t.operatorId || null,\n            opName: t.operatorName || '',\n            opLogo: t.operatorLogo || '',\n            opLink: t.operatorLink || '',\n            dep: toLocal(t.departureTime),\n            arr: toLocal(t.arrivalTime),\n            min: t.durationInMinutes || 0,\n            ship: t.shipName || ''\n          });\n        });\n      });\n\n      let rows = all;\n      if (Array.isArray(cfg.opFilter) && cfg.opFilter.length>0) {\n        rows = all.filter(r => r.opId && cfg.opFilter.includes(String(r.opId)));\n      }\n\n      rows.sort((a,b)=> a.dep - b.dep);\n\n      const total = rows.length;\n      if (total===0){\n        status.textContent = L.status_empty + (errs.length ? ' (some routes returned no data or errors)' : '');\n        out.innerHTML='';\n        setLoader(false); btn.disabled=false; return;\n      }\n\n      status.textContent = (L.status_found||'%d sailings found').replace('%d', total) + (errs.length ? ` (skipped ${errs.length} route${errs.length>1?'s':''})` : '');\n      out.innerHTML = renderTable(rows) + renderCards(rows);\n\n    } catch(e){\n      status.textContent = 'Failed to load data';\n      out.innerHTML = '<pre>'+String(e.message||e)+'<\/pre>';\n    } finally {\n      setLoader(false);\n      btn.disabled = false;\n    }\n  }\n\n  btn.addEventListener('click', load);\n  if (cfg.autoload) load();\n})();\n<\/script>\n\n\n\n\n<h2 class=\"wp-block-heading\">Color Line rutetider og SuperSpeed 1<\/h2>\n\n\n\n<p>Color Line seiler p\u00e5 ruten med <a href=\"https:\/\/hirtshals-kristiansand.com\/no\/color-line-superspeed-1\/\">SuperSpeed 1<\/a>. Dette er et av de mest brukte alternativene mellom Hirtshals og Kristiansand, s\u00e6rlig for reisende med bil, bobil eller campingvogn. Sjekk alltid aktuell rutetid, innsjekkingsfrist og terminal f\u00f8r avreise.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fjord Line rutetider<\/h2>\n\n\n\n<p>Fjord Line har ogs\u00e5 avganger mellom Hirtshals og Kristiansand. Rutetidene kan variere gjennom \u00e5ret, og enkelte avganger kan v\u00e6re mer aktuelle i h\u00f8ysesong. Sammenlign derfor b\u00e5de avgangstid, ankomsttid, pris og reisetid f\u00f8r du velger billett.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Hvor lang tid tar fergen?<\/h2>\n\n\n\n<p>Reisetiden mellom Hirtshals og Kristiansand avhenger av selskap, fart\u00f8y og v\u00e6rforhold. Den raskeste overfarten kan ta rundt 2 timer og 15 minutter, mens andre avganger vanligvis tar lenger tid. Se alltid p\u00e5 den konkrete avgangen i rutetabellen f\u00f8r du bestiller.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Skip p\u00e5 ruten<\/h2>\n\n\n\n<p>Vil du vite mer om fart\u00f8yene som brukes p\u00e5 Hirtshals-Kristiansand? Les mer om skipene her:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/hirtshals-kristiansand.com\/no\/ms-bergensfjord\/\">MS Bergensfjord<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/hirtshals-kristiansand.com\/no\/ms-stavangerfjord\/\">MS Stavangerfjord<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/hirtshals-kristiansand.com\/no\/fjord-fstr\/\">Fjord FSTR<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/hirtshals-kristiansand.com\/no\/color-line-superspeed-1\/\">Color Line SuperSpeed 1<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Sjekk inn i god tid<\/h2>\n\n\n\n<p>Kom til havnen i god tid f\u00f8r avreise. B\u00e5de Kristiansand og Hirtshals kan v\u00e6re travle i helger, ferier og p\u00e5 popul\u00e6re avganger. Reiser du med bil, bobil, campingvogn eller kj\u00e6ledyr, b\u00f8r du legge inn ekstra margin.<\/p>\n\n\n\n<p>Sjekk ogs\u00e5 terminalinformasjonen for rederiet du reiser med:<\/p>\n\n\n\n<p><strong>Color Line:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/hirtshals-kristiansand.com\/no\/kristiansand-havn\/color-line-terminal\/\">Color Line terminal i Kristiansand<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/hirtshals-kristiansand.com\/no\/hirtshals-havn\/color-line-terminal\/\">Color Line terminal i Hirtshals<\/a><\/li>\n<\/ul>\n\n\n\n<p><strong>Fjord Line:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/hirtshals-kristiansand.com\/no\/kristiansand-havn\/fjord-line-terminal\/\">Fjord Line terminal i Kristiansand<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/hirtshals-kristiansand.com\/no\/hirtshals-havn\/fjord-line-terminal\/\">Fjord Line terminal i Hirtshals<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Bestill fergebillett etter rutetid<\/h2>\n\n\n\n<p>Har du funnet en avgang som passer? Sjekk pris og tilgjengelighet f\u00f8r du planlegger resten av reisen. Popul\u00e6re avganger kan bli dyrere eller utsolgt, s\u00e6rlig i juli, helger og ferier. <a href=\"https:\/\/hirtshals-kristiansand.com\/no\/go\/prices\" target=\"_blank\" rel=\"noreferrer noopener\">Sammenlign fergebilletter her<\/a> eller bruk bookingmodulen nedenfor.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Se rutetider for fergen mellom Hirtshals og Kristiansand, b\u00e5de til Norge og Danmark. Color Line og Fjord Line betjener ruten, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":128,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"inline_featured_image":false,"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-51","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Rutetider Hirtshals-Kristiansand | Color Line &amp; Fjord Line<\/title>\n<meta name=\"description\" content=\"Se rutetider og avganger for Hirtshals-Kristiansand med Color Line og Fjord Line. Sjekk reisetid, SuperSpeed 1 og ferger begge veier.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/hirtshals-kristiansand.com\/no\/rutetider\/\" \/>\n<meta property=\"og:locale\" content=\"nb_NO\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Rutetider Hirtshals-Kristiansand | Color Line &amp; Fjord Line\" \/>\n<meta property=\"og:description\" content=\"Se rutetider og avganger for Hirtshals-Kristiansand med Color Line og Fjord Line. Sjekk reisetid, SuperSpeed 1 og ferger begge veier.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/hirtshals-kristiansand.com\/no\/rutetider\/\" \/>\n<meta property=\"og:site_name\" content=\"Ferje Kristiansand Hirtshals\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-19T11:12:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/hirtshals-kristiansand.com\/no\/wp-content\/uploads\/sites\/5\/2024\/03\/hirtshals-kristiansand-ferry-2.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"800\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Ansl. lesetid\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minutter\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/rutetider\\\/\",\"url\":\"https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/rutetider\\\/\",\"name\":\"Rutetider Hirtshals-Kristiansand | Color Line & Fjord Line\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/rutetider\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/rutetider\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2024\\\/03\\\/hirtshals-kristiansand-ferry-2.jpg\",\"datePublished\":\"2024-03-11T13:20:14+00:00\",\"dateModified\":\"2026-05-19T11:12:33+00:00\",\"description\":\"Se rutetider og avganger for Hirtshals-Kristiansand med Color Line og Fjord Line. Sjekk reisetid, SuperSpeed 1 og ferger begge veier.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/rutetider\\\/#breadcrumb\"},\"inLanguage\":\"nb-NO\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/rutetider\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nb-NO\",\"@id\":\"https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/rutetider\\\/#primaryimage\",\"url\":\"https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2024\\\/03\\\/hirtshals-kristiansand-ferry-2.jpg\",\"contentUrl\":\"https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2024\\\/03\\\/hirtshals-kristiansand-ferry-2.jpg\",\"width\":1200,\"height\":800,\"caption\":\"rutetider\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/rutetider\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Kristiansand Hirtshals\",\"item\":\"https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Rutetider for Hirtshals-Kristiansand\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/#website\",\"url\":\"https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/\",\"name\":\"Ferje Kristiansand Hirtshals\",\"description\":\"Alt om fergeoverfarten fra Hirtshals til Kristiansand\",\"publisher\":{\"@id\":\"https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nb-NO\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/#organization\",\"name\":\"Ferje Kristiansand Hirtshals\",\"url\":\"https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nb-NO\",\"@id\":\"https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2025\\\/05\\\/hirtshals-kristiansand.svg\",\"contentUrl\":\"https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2025\\\/05\\\/hirtshals-kristiansand.svg\",\"width\":800,\"height\":256,\"caption\":\"Ferje Kristiansand Hirtshals\"},\"image\":{\"@id\":\"https:\\\/\\\/hirtshals-kristiansand.com\\\/no\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Rutetider Hirtshals-Kristiansand | Color Line & Fjord Line","description":"Se rutetider og avganger for Hirtshals-Kristiansand med Color Line og Fjord Line. Sjekk reisetid, SuperSpeed 1 og ferger begge veier.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/hirtshals-kristiansand.com\/no\/rutetider\/","og_locale":"nb_NO","og_type":"article","og_title":"Rutetider Hirtshals-Kristiansand | Color Line & Fjord Line","og_description":"Se rutetider og avganger for Hirtshals-Kristiansand med Color Line og Fjord Line. Sjekk reisetid, SuperSpeed 1 og ferger begge veier.","og_url":"https:\/\/hirtshals-kristiansand.com\/no\/rutetider\/","og_site_name":"Ferje Kristiansand Hirtshals","article_modified_time":"2026-05-19T11:12:33+00:00","og_image":[{"width":1200,"height":800,"url":"https:\/\/hirtshals-kristiansand.com\/no\/wp-content\/uploads\/sites\/5\/2024\/03\/hirtshals-kristiansand-ferry-2.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Ansl. lesetid":"3 minutter"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/hirtshals-kristiansand.com\/no\/rutetider\/","url":"https:\/\/hirtshals-kristiansand.com\/no\/rutetider\/","name":"Rutetider Hirtshals-Kristiansand | Color Line & Fjord Line","isPartOf":{"@id":"https:\/\/hirtshals-kristiansand.com\/no\/#website"},"primaryImageOfPage":{"@id":"https:\/\/hirtshals-kristiansand.com\/no\/rutetider\/#primaryimage"},"image":{"@id":"https:\/\/hirtshals-kristiansand.com\/no\/rutetider\/#primaryimage"},"thumbnailUrl":"https:\/\/hirtshals-kristiansand.com\/no\/wp-content\/uploads\/sites\/5\/2024\/03\/hirtshals-kristiansand-ferry-2.jpg","datePublished":"2024-03-11T13:20:14+00:00","dateModified":"2026-05-19T11:12:33+00:00","description":"Se rutetider og avganger for Hirtshals-Kristiansand med Color Line og Fjord Line. Sjekk reisetid, SuperSpeed 1 og ferger begge veier.","breadcrumb":{"@id":"https:\/\/hirtshals-kristiansand.com\/no\/rutetider\/#breadcrumb"},"inLanguage":"nb-NO","potentialAction":[{"@type":"ReadAction","target":["https:\/\/hirtshals-kristiansand.com\/no\/rutetider\/"]}]},{"@type":"ImageObject","inLanguage":"nb-NO","@id":"https:\/\/hirtshals-kristiansand.com\/no\/rutetider\/#primaryimage","url":"https:\/\/hirtshals-kristiansand.com\/no\/wp-content\/uploads\/sites\/5\/2024\/03\/hirtshals-kristiansand-ferry-2.jpg","contentUrl":"https:\/\/hirtshals-kristiansand.com\/no\/wp-content\/uploads\/sites\/5\/2024\/03\/hirtshals-kristiansand-ferry-2.jpg","width":1200,"height":800,"caption":"rutetider"},{"@type":"BreadcrumbList","@id":"https:\/\/hirtshals-kristiansand.com\/no\/rutetider\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Kristiansand Hirtshals","item":"https:\/\/hirtshals-kristiansand.com\/no\/"},{"@type":"ListItem","position":2,"name":"Rutetider for Hirtshals-Kristiansand"}]},{"@type":"WebSite","@id":"https:\/\/hirtshals-kristiansand.com\/no\/#website","url":"https:\/\/hirtshals-kristiansand.com\/no\/","name":"Ferje Kristiansand Hirtshals","description":"Alt om fergeoverfarten fra Hirtshals til Kristiansand","publisher":{"@id":"https:\/\/hirtshals-kristiansand.com\/no\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/hirtshals-kristiansand.com\/no\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nb-NO"},{"@type":"Organization","@id":"https:\/\/hirtshals-kristiansand.com\/no\/#organization","name":"Ferje Kristiansand Hirtshals","url":"https:\/\/hirtshals-kristiansand.com\/no\/","logo":{"@type":"ImageObject","inLanguage":"nb-NO","@id":"https:\/\/hirtshals-kristiansand.com\/no\/#\/schema\/logo\/image\/","url":"https:\/\/hirtshals-kristiansand.com\/no\/wp-content\/uploads\/sites\/5\/2025\/05\/hirtshals-kristiansand.svg","contentUrl":"https:\/\/hirtshals-kristiansand.com\/no\/wp-content\/uploads\/sites\/5\/2025\/05\/hirtshals-kristiansand.svg","width":800,"height":256,"caption":"Ferje Kristiansand Hirtshals"},"image":{"@id":"https:\/\/hirtshals-kristiansand.com\/no\/#\/schema\/logo\/image\/"}}]}},"uagb_featured_image_src":{"full":["https:\/\/hirtshals-kristiansand.com\/no\/wp-content\/uploads\/sites\/5\/2024\/03\/hirtshals-kristiansand-ferry-2.jpg",1200,800,false],"thumbnail":["https:\/\/hirtshals-kristiansand.com\/no\/wp-content\/uploads\/sites\/5\/2024\/03\/hirtshals-kristiansand-ferry-2-150x150.jpg",150,150,true],"medium":["https:\/\/hirtshals-kristiansand.com\/no\/wp-content\/uploads\/sites\/5\/2024\/03\/hirtshals-kristiansand-ferry-2-300x200.jpg",300,200,true],"medium_large":["https:\/\/hirtshals-kristiansand.com\/no\/wp-content\/uploads\/sites\/5\/2024\/03\/hirtshals-kristiansand-ferry-2-768x512.jpg",768,512,true],"large":["https:\/\/hirtshals-kristiansand.com\/no\/wp-content\/uploads\/sites\/5\/2024\/03\/hirtshals-kristiansand-ferry-2-1024x683.jpg",1024,683,true],"1536x1536":["https:\/\/hirtshals-kristiansand.com\/no\/wp-content\/uploads\/sites\/5\/2024\/03\/hirtshals-kristiansand-ferry-2.jpg",1200,800,false],"2048x2048":["https:\/\/hirtshals-kristiansand.com\/no\/wp-content\/uploads\/sites\/5\/2024\/03\/hirtshals-kristiansand-ferry-2.jpg",1200,800,false]},"uagb_author_info":{"display_name":"mail@robberttigchelaar.com","author_link":"https:\/\/hirtshals-kristiansand.com\/no\/author\/mailrobberttigchelaar-com\/"},"uagb_comment_info":0,"uagb_excerpt":"Se rutetider for fergen mellom Hirtshals og Kristiansand, b\u00e5de til Norge og Danmark. Color Line og Fjord Line betjener ruten, [&hellip;]","_links":{"self":[{"href":"https:\/\/hirtshals-kristiansand.com\/no\/wp-json\/wp\/v2\/pages\/51","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hirtshals-kristiansand.com\/no\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/hirtshals-kristiansand.com\/no\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/hirtshals-kristiansand.com\/no\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hirtshals-kristiansand.com\/no\/wp-json\/wp\/v2\/comments?post=51"}],"version-history":[{"count":11,"href":"https:\/\/hirtshals-kristiansand.com\/no\/wp-json\/wp\/v2\/pages\/51\/revisions"}],"predecessor-version":[{"id":277,"href":"https:\/\/hirtshals-kristiansand.com\/no\/wp-json\/wp\/v2\/pages\/51\/revisions\/277"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hirtshals-kristiansand.com\/no\/wp-json\/wp\/v2\/media\/128"}],"wp:attachment":[{"href":"https:\/\/hirtshals-kristiansand.com\/no\/wp-json\/wp\/v2\/media?parent=51"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}