HERE WE CAMP

(function () { "use strict"; /* ========================================================= Flatpickr-Dateien ========================================================= */ const FLATPICKR_JS = "https://cdn.jsdelivr.net/npm/flatpickr@4.6.13/dist/flatpickr.min.js"; const FLATPICKR_CSS = "https://cdn.jsdelivr.net/npm/flatpickr@4.6.13/dist/themes/material_red.css"; const FLATPICKR_LOCALE_DE = "https://cdn.jsdelivr.net/npm/flatpickr@4.6.13/dist/l10n/de.js"; const FLATPICKR_LOCALE_DA = "https://cdn.jsdelivr.net/npm/flatpickr@4.6.13/dist/l10n/da.js"; /* ========================================================= Buchungszeitraum WICHTIG: - Frühestes Datum = heute - Saisonende = 30.09.2026 - Saison 2027 derzeit noch geschlossen ========================================================= */ const SEASON_END_DMY = "30-09-2026"; /* ========================================================= Elementor-Felder ========================================================= */ const DATE_FIELD_SELECTOR = "#form-field-datum"; const TYPE_FIELD_SELECTOR = "#form-field-typ"; const BUTTON_SELECTOR = "#suchen-button"; /* ========================================================= Kategorie-Zuordnung ========================================================= */ const CBPID_MAP = { all: "", stellplaetze: "22", bb: "40", shelter: "37", huette: "38", glamping: "41", angebote: "7" }; const CBPID_REVERSE_MAP = { "22": "stellplaetze", "40": "bb", "37": "shelter", "38": "huette", "41": "glamping", "7": "angebote" }; /* ========================================================= Hilfsfunktionen ========================================================= */ function qs(selector, root) { return ( root || document ).querySelector( selector ); } function loadCss(href) { return new Promise( function ( resolve, reject ) { const existingCss = document.querySelector( 'link[data-gm-flatpickr-css="true"]' ); if ( existingCss ) { resolve(); return; } const link = document.createElement( "link" ); link.rel = "stylesheet"; link.href = href; link.setAttribute( "data-gm-flatpickr-css", "true" ); link.onload = resolve; link.onerror = reject; document.head.appendChild( link ); } ); } function loadScript( src, identifier ) { return new Promise( function ( resolve, reject ) { const existingScript = document.querySelector( 'script[data-gm-script="' + identifier + '"]' ); if ( existingScript ) { if ( existingScript.getAttribute( "data-loaded" ) === "true" ) { resolve(); } else { existingScript.addEventListener( "load", resolve, { once: true } ); existingScript.addEventListener( "error", reject, { once: true } ); } return; } const script = document.createElement( "script" ); script.src = src; script.async = true; script.setAttribute( "data-gm-script", identifier ); script.onload = function () { script.setAttribute( "data-loaded", "true" ); resolve(); }; script.onerror = reject; document.head.appendChild( script ); } ); } function getParam(name) { try { return ( new URLSearchParams( window.location.search ).get(name) || "" ).trim(); } catch (error) { return ""; } } function guessLang() { const host = ( window.location.hostname || "" ).toLowerCase(); if ( host.endsWith(".dk") ) { return "DA"; } if ( host.endsWith(".co") ) { return "EN"; } return "DE"; } function getResultsUrl(lang) { lang = ( lang || guessLang() ).toUpperCase(); if ( lang === "DA" ) { return ( "https://gammelmark.dk/book-online/" ); } if ( lang === "EN" ) { return ( "https://gammelmark.co/book-online/" ); } return ( "https://gammelmark.de/online-buchen/" ); } function getCurrency(lang) { lang = ( lang || guessLang() ).toUpperCase(); if ( lang === "DA" ) { return ""; } return "EUR"; } function getTexts(lang) { lang = ( lang || guessLang() ).toUpperCase(); if ( lang === "DA" ) { return { button: "Find", alert: "Vælg venligst ankomst- og afrejsedato.", outsideSeason: "Den valgte periode ligger uden for bookingsæsonen." }; } if ( lang === "EN" ) { return { button: "Find", alert: "Please select arrival and departure date.", outsideSeason: "The selected period is outside the booking season." }; } return { button: "Finden", alert: "Bitte An- und Abreisedatum wählen.", outsideSeason: "Der gewählte Zeitraum liegt außerhalb der Buchungssaison." }; } function pad2(number) { return String( number ).padStart( 2, "0" ); } function formatDateDDMMYYYY(date) { return ( pad2( date.getDate() ) + "-" + pad2( date.getMonth() + 1 ) + "-" + date.getFullYear() ); } function formatDateForInput(date) { return ( pad2( date.getDate() ) + "." + pad2( date.getMonth() + 1 ) + "." + date.getFullYear() ); } function parseDMY(value) { if ( !value ) { return null; } const parts = value.split("-"); if ( parts.length !== 3 ) { return null; } const day = parseInt( parts[0], 10 ); const month = parseInt( parts[1], 10 ); const year = parseInt( parts[2], 10 ); if ( Number.isNaN(day) || Number.isNaN(month) || Number.isNaN(year) ) { return null; } return new Date( year, month - 1, day, 12, 0, 0, 0 ); } function getToday() { const today = new Date(); today.setHours( 12, 0, 0, 0 ); return today; } function getSeasonEnd() { return parseDMY( SEASON_END_DMY ); } function isBookableDate(date) { if ( !date ) { return false; } const check = new Date(date); check.setHours( 12, 0, 0, 0 ); return ( check >= getToday() && check <= getSeasonEnd() ); } function monthsForViewport() { return window.matchMedia( "(max-width: 767px)" ).matches ? 1 : 3; } function getLocaleKey(lang) { lang = ( lang || guessLang() ).toUpperCase(); if ( lang === "DE" ) { return "de"; } if ( lang === "DA" ) { return "da"; } return "default"; } function setButtonText(lang) { const button = qs( BUTTON_SELECTOR ); if ( !button ) { return; } button.textContent = getTexts( lang ).button; } function syncSelectFromCbpid() { const typeField = qs( TYPE_FIELD_SELECTOR ); if ( !typeField ) { return; } const cbpid = getParam( "cbpid" ); if ( !cbpid ) { return; } const value = CBPID_REVERSE_MAP[ cbpid ]; if ( value ) { typeField.value = value; typeField.dispatchEvent( new Event( "change", { bubbles: true } ) ); } } function setDateFieldDisplay( selectedDates, dateField ) { if ( !dateField || !selectedDates || selectedDates.length !== 2 ) { return; } dateField.value = formatDateForInput( selectedDates[0] ) + " - " + formatDateForInput( selectedDates[1] ); dateField.dispatchEvent( new Event( "input", { bubbles: true } ) ); dateField.dispatchEvent( new Event( "change", { bubbles: true } ) ); } /* ========================================================= Initialisierung ========================================================= */ document.addEventListener( "DOMContentLoaded", function () { loadCss( FLATPICKR_CSS ) .then( function () { return loadScript( FLATPICKR_JS, "flatpickr" ); } ) .then( function () { return Promise.all( [ loadScript( FLATPICKR_LOCALE_DE, "flatpickr-locale-de" ), loadScript( FLATPICKR_LOCALE_DA, "flatpickr-locale-da" ) ] ); } ) .then( function () { if ( typeof window.flatpickr === "undefined" ) { console.error( "Flatpickr konnte nicht geladen werden." ); return; } const LANG = ( getParam("lang") || guessLang() ).toUpperCase(); const TEXTS = getTexts( LANG ); const dateField = qs( DATE_FIELD_SELECTOR ); const typeField = qs( TYPE_FIELD_SELECTOR ); const button = qs( BUTTON_SELECTOR ); if ( !dateField || !button ) { console.error( "Datumsfeld oder Suchbutton wurde nicht gefunden." ); return; } setButtonText( LANG ); syncSelectFromCbpid(); let selectedDates = []; let flatpickrInstance = null; let currentMonthCount = monthsForViewport(); const initialFrom = parseDMY( getParam( "from" ) ); const initialTo = parseDMY( getParam( "to" ) ); /* * URL-Daten nur übernehmen, * wenn sie noch gültig sind. */ if ( initialFrom && initialTo && isBookableDate( initialFrom ) && isBookableDate( initialTo ) ) { selectedDates = [ initialFrom, initialTo ]; } function initFlatpickr() { const oldSelectedDates = selectedDates.slice(); if ( flatpickrInstance ) { try { flatpickrInstance.destroy(); } catch (error) { console.warn( "Flatpickr konnte nicht sauber entfernt werden.", error ); } flatpickrInstance = null; } currentMonthCount = monthsForViewport(); flatpickrInstance = window.flatpickr( dateField, { mode: "range", /* * Vergangenheit automatisch sperren */ minDate: getToday(), /* * Aktuelles Saisonende */ maxDate: getSeasonEnd(), defaultDate: oldSelectedDates, dateFormat: "Y-m-d", altInput: false, showMonths: currentMonthCount, monthSelectorType: "static", allowInput: false, disableMobile: true, locale: getLocaleKey( LANG ), onChange: function ( dates ) { selectedDates = dates.slice(); if ( dates.length === 2 ) { setDateFieldDisplay( dates, dateField ); } }, onReady: function ( dates, dateString, instance ) { const yearInput = instance .calendarContainer .querySelector( ".flatpickr-current-month input.cur-year" ); if ( yearInput ) { yearInput.setAttribute( "readonly", "readonly" ); yearInput.setAttribute( "tabindex", "-1" ); } if ( selectedDates.length === 2 ) { setDateFieldDisplay( selectedDates, dateField ); } } } ); window.__gmFlatpickr = flatpickrInstance; } initFlatpickr(); /* ===================================================== Wechsel zwischen Mobil- und Desktopansicht ===================================================== */ let resizeTimer = null; window.addEventListener( "resize", function () { clearTimeout( resizeTimer ); resizeTimer = setTimeout( function () { const newMonthCount = monthsForViewport(); if ( newMonthCount !== currentMonthCount ) { initFlatpickr(); } }, 200 ); } ); /* ===================================================== Weiterleitung zur Buchungsseite ===================================================== */ button.addEventListener( "click", function ( event ) { event.preventDefault(); if ( selectedDates.length !== 2 ) { alert( TEXTS.alert ); if ( window.__gmFlatpickr ) { window.__gmFlatpickr.open(); } return; } /* * Zusätzliche Sicherheitsprüfung. */ if ( !isBookableDate( selectedDates[0] ) || !isBookableDate( selectedDates[1] ) ) { alert( TEXTS.outsideSeason ); if ( window.__gmFlatpickr ) { window.__gmFlatpickr.open(); } return; } const typeKey = ( typeField && typeField.value ) ? String( typeField.value ).trim() : "all"; const cbpid = CBPID_MAP[ typeKey ] || ""; const currency = getCurrency( LANG ); const url = new URL( getResultsUrl( LANG ) ); url.searchParams.set( "lang", LANG ); url.searchParams.set( "from", formatDateDDMMYYYY( selectedDates[0] ) ); url.searchParams.set( "to", formatDateDDMMYYYY( selectedDates[1] ) ); if ( currency ) { url.searchParams.set( "currency", currency ); } else { url.searchParams.delete( "currency" ); } if ( cbpid ) { url.searchParams.set( "cbpid", cbpid ); } else { url.searchParams.delete( "cbpid" ); } window.location.href = url.toString(); } ); } ) .catch( function ( error ) { console.error( "Booking mask init failed:", error ); } ); } ); })();
Air
-- °C
Water
-- °C

Reception opening hours

Check-In:
2 – 4 pm

Online Check-In:
Later than 4 pm

Check-Out:
8 – 10 am

Kiosk:
2– 4 pm

Gammelmark Strand Camping

Visit us and enjoy the unique view at Gammelmark Strand Camping!
Beautifully located on the Vemmingbund Bay on the Broagerland Peninsula near Sønderborg.

With the Gendarm path hiking trail at your feet, Danish history all around, and the sea view before your eyes, the campsite is perfect for any camper or hiker. Zusätzlich zum Camping bieten wir Zimmer, Tiny Häuser, Hütten, Mietwohnwagen, Glamping- und Shelter-Zelte an.

Children and adults alike will find opportunities for both relaxation and activity here.
In our diverse and varied areas, there is a wide selection of different spots, each with its own unique atmosphere. Here you will find pitches on panoramic terraces, sheltered pitches by the forest, pitches right by the water – and in any case just the right pitch for you. All pitches have a beautiful view, and over 80% have a sea view.

Explore Gammelmark and experience the South Jutland region.

See you at Gammelmark!

News & Events

NewsNews

Late-summer discount

From 17/08/2026 Even though summer isn’t over yet, we’re lowering our prices
...

News

Pig Roast with LIVE Music

August 22, 20263 PM until late Register by August 12 at Schrøders
...

Events

Wingfoil Testival

11.–13. September In September 2026, Gammelmark Strand Camping will host the Surfpirates
...

Camper vans

At Gammelmark Strand Camping, we offer plenty of options for motorhome travelers.
Whether you’re stopping by for a short visit during your European tour or planning to spend several weeks exploring south jutland – we definitely have the right spot for you!

Caravan

At Gammelmark, we have cozy rental caravans with a beautiful view of the Baltic Sea. The minimum rental period is 2 nights.

Bed linen and towels are included. Our rental caravans accommodate up to 2adults and 2 children.

Tiny house | Cabin

Enjoy a vacation or a weekend by the sea. At Gammelmark Strand Camping, we have two tiny houses and a camping cabin near the beach and right on Gendarmsti. Pure hygge feeling at the beautiful Vemmingbund Bay.

Room

Gammelmark Strand Camping offers more than just the usual camping. We also have three cosy double rooms available for you. The rooms are located on the first floor of the main building and some offer a view over the sea to the Düppeler Mühle and the town of Sonderburg.

Glamping-tent

Glamping with a sea view – the large villa tent. It combines the best of both worlds: a close-to-nature camping experience and relaxed comfort.

Between the Baltic Sea, forest, and open space, the large villa tent offers the perfect getaway for anyone seeking relaxation in the heart of nature.

Shelter-telt

This popular form of camping is ideal for hikers and families with up to four people. The typical Danish “hygge” factor creates coziness and a sense of well-being in the heart of nature.
At Gammelmark, we have a total of 3 shelter tents, each offering 4 sleeping spaces.