From 00dc40515804774afee13e02e741b1510a852300 Mon Sep 17 00:00:00 2001 From: ostertun Date: Mon, 27 Jun 2022 11:31:59 +0200 Subject: [PATCH 1/3] added regatta_facts incl links --- server/content/index.php | 3 +- server/content/planning.php | 3 +- server/content/planning_view.php | 3 +- server/content/regatta_facts.php | 49 ++++++ server/content/regattas.php | 3 +- server/scripts/onRegattaClicked.js | 8 + server/scripts/regatta_facts.js | 258 +++++++++++++++++++++++++++++ 7 files changed, 323 insertions(+), 4 deletions(-) create mode 100644 server/content/regatta_facts.php create mode 100644 server/scripts/regatta_facts.js diff --git a/server/content/index.php b/server/content/index.php index 5f315b4..f826831 100644 --- a/server/content/index.php +++ b/server/content/index.php @@ -86,11 +86,12 @@ $items .= $tpl->load('menu/item-icon-badge', ['Meldeliste', '', 'html-id' => 'menu-item-entrylist', 'icon' => 'fa-file-signature', 'badge-id' => 'badge-regatta-entrylist']); $items .= $tpl->load('menu/item-icon', ['Ergebnisse', '', 'html-id' => 'menu-item-results', 'icon' => 'fa-poll']); $items .= $tpl->load('menu/item-icon', ['Bericht', '', 'html-id' => 'menu-item-bericht', 'icon' => 'fa-book']); + $items .= $tpl->load('menu/item-icon', ['Fakten', '', 'html-id' => 'menu-item-facts', 'icon' => 'fa-list']); $items .= $tpl->load('menu/item-icon', ['Informationen', '', 'html-id' => 'menu-item-info', 'icon' => 'fa-info']); $items .= $tpl->load('menu/item-icon-badge', ['Meldung', '', 'html-id' => 'menu-item-meldung', 'icon' => 'fa-file-signature', 'badge-id' => 'badge-regatta-meldung']); $items .= $tpl->load('menu/item-icon', ['offizielle Ergebnisse', '', 'html-id' => 'menu-item-oresults', 'icon' => 'fa-poll']); $items .= $tpl->load('menu/item-icon', ['Vereins-Website', '', 'html-id' => 'menu-item-clubwebsite', 'icon' => 'fa-globe']); - $sp['menus'] .= $tpl->load('menu/bottom', [$items, 'html-id' => 'menu-regatta', 'title' => 'Regatta-Details', 'height' => 320]); + $sp['menus'] .= $tpl->load('menu/bottom', [$items, 'html-id' => 'menu-regatta', 'title' => 'Regatta-Details', 'height' => 400]); // Favorites Menu $items = $tpl->load('menu/item-icon', ['Nicht mehr folgen', '#', 'html-id' => 'menu-item-unfollow', 'icon' => 'fa-heart', 'css-class' => ' border-0']); diff --git a/server/content/planning.php b/server/content/planning.php index 8a62b93..1b223cd 100644 --- a/server/content/planning.php +++ b/server/content/planning.php @@ -34,11 +34,12 @@ $items .= $tpl->load('menu/item-icon-badge', ['Meldeliste', '', 'html-id' => 'menu-item-entrylist', 'icon' => 'fa-file-signature', 'badge-id' => 'badge-regatta-entrylist']); $items .= $tpl->load('menu/item-icon', ['Ergebnisse', '', 'html-id' => 'menu-item-results', 'icon' => 'fa-poll']); $items .= $tpl->load('menu/item-icon', ['Bericht', '', 'html-id' => 'menu-item-bericht', 'icon' => 'fa-book']); + $items .= $tpl->load('menu/item-icon', ['Fakten', '', 'html-id' => 'menu-item-facts', 'icon' => 'fa-list']); $items .= $tpl->load('menu/item-icon', ['Informationen', '', 'html-id' => 'menu-item-info', 'icon' => 'fa-info']); $items .= $tpl->load('menu/item-icon-badge', ['Meldung', '', 'html-id' => 'menu-item-meldung', 'icon' => 'fa-file-signature', 'badge-id' => 'badge-regatta-meldung']); $items .= $tpl->load('menu/item-icon', ['offizielle Ergebnisse', '', 'html-id' => 'menu-item-oresults', 'icon' => 'fa-poll']); $items .= $tpl->load('menu/item-icon', ['Vereins-Website', '', 'html-id' => 'menu-item-clubwebsite', 'icon' => 'fa-globe']); - $sp['menus'] .= $tpl->load('menu/bottom', [$items, 'html-id' => 'menu-regatta', 'title' => 'Regatta-Details', 'height' => 320]); + $sp['menus'] .= $tpl->load('menu/bottom', [$items, 'html-id' => 'menu-regatta', 'title' => 'Regatta-Details', 'height' => 400]); // Menu Edit status $items = $tpl->load('menu/item-switch', ['Gemeldet', 'html-id' => 'switch-status-gemeldet', 'icon' => 'fa-file-signature']); diff --git a/server/content/planning_view.php b/server/content/planning_view.php index 0c00e6b..24b9f1a 100644 --- a/server/content/planning_view.php +++ b/server/content/planning_view.php @@ -26,11 +26,12 @@ $items .= $tpl->load('menu/item-icon-badge', ['Meldeliste', '', 'html-id' => 'menu-item-entrylist', 'icon' => 'fa-file-signature', 'badge-id' => 'badge-regatta-entrylist']); $items .= $tpl->load('menu/item-icon', ['Ergebnisse', '', 'html-id' => 'menu-item-results', 'icon' => 'fa-poll']); $items .= $tpl->load('menu/item-icon', ['Bericht', '', 'html-id' => 'menu-item-bericht', 'icon' => 'fa-book']); + $items .= $tpl->load('menu/item-icon', ['Fakten', '', 'html-id' => 'menu-item-facts', 'icon' => 'fa-list']); $items .= $tpl->load('menu/item-icon', ['Informationen', '', 'html-id' => 'menu-item-info', 'icon' => 'fa-info']); $items .= $tpl->load('menu/item-icon-badge', ['Meldung', '', 'html-id' => 'menu-item-meldung', 'icon' => 'fa-file-signature', 'badge-id' => 'badge-regatta-meldung']); $items .= $tpl->load('menu/item-icon', ['offizielle Ergebnisse', '', 'html-id' => 'menu-item-oresults', 'icon' => 'fa-poll']); $items .= $tpl->load('menu/item-icon', ['Vereins-Website', '', 'html-id' => 'menu-item-clubwebsite', 'icon' => 'fa-globe']); - $sp['menus'] .= $tpl->load('menu/bottom', [$items, 'html-id' => 'menu-regatta', 'title' => 'Regatta-Details', 'height' => 320]); + $sp['menus'] .= $tpl->load('menu/bottom', [$items, 'html-id' => 'menu-regatta', 'title' => 'Regatta-Details', 'height' => 400]); $sp['scripts'] .= $scripts->load('onRegattaClicked'); $sp['scripts'] .= $scripts->load('planning_view'); diff --git a/server/content/regatta_facts.php b/server/content/regatta_facts.php new file mode 100644 index 0000000..ddeb215 --- /dev/null +++ b/server/content/regatta_facts.php @@ -0,0 +1,49 @@ +'; + $content .= '

'; + + $sp['output'] .= $tpl->load('card', [$content]); + + // NO FACTS INFO + $content = '

Es sind keine Fakten zu dieser Veranstaltung hinterlegt. Bitte lies die Ausschreibung.

'; + $sp['output'] .= $tpl->load('card', [$content, 'html-id' => 'card-nofactsinfo']); + + // Meldegeld + $content = '

Meldegeld

'; + $content .= '

'; + $sp['output'] .= $tpl->load('card', [$content, 'html-id' => 'card-entryfee']); + + // Wettfahrten + $content = '

Wettfahrten

'; + $sp['output'] .= $tpl->load('card', [$content, 'html-id' => 'card-races']); + + // Zeitplan + $content = '

Zeitplan

'; + $content .= $tpl->load('table', ['css-class' => 'mb-0 text-nowrap']); + $sp['output'] .= $tpl->load('card', [$content, 'html-id' => 'card-times']); + + // Camping + $content = '

Camping

'; + $sp['output'] .= $tpl->load('card', [$content, 'html-id' => 'card-camping']); + + // Verpflegung + $content = '

Verpflegung

'; + $sp['output'] .= $tpl->load('card', [$content, 'html-id' => 'card-food']); + + // Weitere Infos + $content = '

Weitere Informationen

'; + $sp['output'] .= $tpl->load('card', [$content, 'html-id' => 'card-text']); + + // Disclaimer + $content = '

Alle Angaben ohne Gewähr. Änderungen vorbehalten. Am Ende gilt, was in der Ausschreibung / Segelanweisung steht!

'; + $sp['output'] .= $tpl->load('card', [$content]); + + $sp['scripts'] .= $scripts->load('regatta_facts'); + +?> diff --git a/server/content/regattas.php b/server/content/regattas.php index 6179f28..465b908 100644 --- a/server/content/regattas.php +++ b/server/content/regattas.php @@ -30,11 +30,12 @@ $items .= $tpl->load('menu/item-icon-badge', ['Meldeliste', '', 'html-id' => 'menu-item-entrylist', 'icon' => 'fa-file-signature', 'badge-id' => 'badge-regatta-entrylist']); $items .= $tpl->load('menu/item-icon', ['Ergebnisse', '', 'html-id' => 'menu-item-results', 'icon' => 'fa-poll']); $items .= $tpl->load('menu/item-icon', ['Bericht', '', 'html-id' => 'menu-item-bericht', 'icon' => 'fa-book']); + $items .= $tpl->load('menu/item-icon', ['Fakten', '', 'html-id' => 'menu-item-facts', 'icon' => 'fa-list']); $items .= $tpl->load('menu/item-icon', ['Informationen', '', 'html-id' => 'menu-item-info', 'icon' => 'fa-info']); $items .= $tpl->load('menu/item-icon-badge', ['Meldung', '', 'html-id' => 'menu-item-meldung', 'icon' => 'fa-file-signature', 'badge-id' => 'badge-regatta-meldung']); $items .= $tpl->load('menu/item-icon', ['offizielle Ergebnisse', '', 'html-id' => 'menu-item-oresults', 'icon' => 'fa-poll']); $items .= $tpl->load('menu/item-icon', ['Vereins-Website', '', 'html-id' => 'menu-item-clubwebsite', 'icon' => 'fa-globe']); - $sp['menus'] .= $tpl->load('menu/bottom', [$items, 'html-id' => 'menu-regatta', 'title' => 'Regatta-Details', 'height' => 320]); + $sp['menus'] .= $tpl->load('menu/bottom', [$items, 'html-id' => 'menu-regatta', 'title' => 'Regatta-Details', 'height' => 400]); $sp['scripts'] .= $scripts->load('onRegattaClicked'); $sp['scripts'] .= $scripts->load('regattas'); diff --git a/server/scripts/onRegattaClicked.js b/server/scripts/onRegattaClicked.js index 704b908..72b6e5d 100644 --- a/server/scripts/onRegattaClicked.js +++ b/server/scripts/onRegattaClicked.js @@ -137,6 +137,14 @@ async function onRegattaClicked(id) { $('#menu-item-bericht').hide(); } + // Fakten + if ('facts' in regatta && regatta['facts'] != null) { + $('#menu-item-facts').show(); + $('#menu-item-facts').attr('href', LINK_PRE + 'regatta_facts?regatta=' + regatta['id']); + } else { + $('#menu-item-facts').hide(); + } + // Info if (regatta['info'] != '') { $('#menu-item-info').show(); diff --git a/server/scripts/regatta_facts.js b/server/scripts/regatta_facts.js new file mode 100644 index 0000000..90f8d11 --- /dev/null +++ b/server/scripts/regatta_facts.js @@ -0,0 +1,258 @@ +var siteScript = async function() { + $('#card-nofactsinfo').hide(); + $('#card-entryfee').hide(); + $('#card-races').hide(); + $('#card-races').find('p').remove(); + $('#card-races').find('table').remove(); + $('#card-times').hide(); + $('#card-camping').hide(); + $('#card-food').hide(); + $('#card-text').hide(); + + var regattaId = findGetParameter('regatta'); + if (regattaId == null) { + $('#h1-title').text('Regatta nicht gefunden'); + hideLoader(); + return; + } + var regatta = await dbGetData('regattas', regattaId); + if (regatta == null) { + $('#h1-title').text('Regatta nicht gefunden'); + hideLoader(); + return; + } + var dateFrom = parseDate(regatta['date']); + var dateTo = parseDate(regatta['date']); + dateTo.setDate(dateTo.getDate() + Math.max(parseInt(regatta['length']) - 1, 0)); + + $('#h1-title').text(regatta.name); + if (regatta.length < 1) { + if (formatDate('d.m', dateFrom) == '01.01') { + $('#p-title').html('Datum noch unklar'); + } else { + $('#p-title').html(formatDate('d.m.Y', dateFrom) + ' - Datum nicht final'); + } + } else { + $('#p-title').html(formatDate('d.m.Y', dateFrom) + ' - ' + formatDate('d.m.Y', dateTo)); + } + + if (regatta.facts != null) { + var facts = JSON.parse(regatta.facts); + + // Meldegeld + if ('entry' in facts && 'price' in facts.entry) { + $('#card-entryfee').show(); + var content = 'Meldegeld: ' + (new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(facts.entry.price)) + ''; + if ('early' in facts.entry) { + content += '
vergünstigt: ' + (new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(facts.entry.early)) + ' (bis ' + formatDate('d.m.Y', parseDate(regatta.meldungEarly)) + ')'; + } + if ('late' in facts.entry) { + content += '
nach Meldeschluss (' + formatDate('d.m.Y', parseDate(regatta.meldungSchluss)) + '): ' + (new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(facts.entry.late)) + ''; + } + $('#card-entryfee').find('p').html(content); + } + + // Wettfahrten / Anzahl + if ('races' in facts && 'cnt' in facts.races) { + $('#card-races').show(); + $('#card-races').find('.content').append('

Anzahl Wettfahrten: ' + facts.races.cnt + '

'); + if ('days' in facts.races) { + var table = $(''); + var tbody = $(''); + for (var day in facts.races.days) { + var cnt = facts.races.days[day]; + day = formatDate('D, j.', parseDate(day)); + tbody.append('') + } + table.append(tbody); + $('#card-races').find('.content').append(table); + } + } + + // Wettfahrten / Racetimes + if ('racetimes' in facts) { + $('#card-races').show(); + var table = $('
' + day + '' + cnt + '
'); + var tbody = $(''); + if ('sollzeit' in facts.racetimes) { + tbody.append(''); + } + if ('zeitlimit' in facts.racetimes) { + tbody.append(''); + } + if ('zielzeitfenster' in facts.racetimes) { + tbody.append(''); + } + table.append(tbody); + $('#card-races').find('.content').append(table); + } + + // Zeitplan + if ('times' in facts) { + $('#card-times').show(); + var tbody = $('#card-times').find('table').find('tbody'); + tbody.html(''); + if ('checkin' in facts.times) { + tbody.append(''); + for (var day in facts.times.checkin) { + var times = facts.times.checkin[day]; + day = formatDate('D, j.', parseDate(day)); + var content = ''; + if ('from' in times && 'to' in times) content = times.from + ' bis ' + times.to; // TODO: + else if ('from' in times) content = 'ab ' + times.from; + else if ('to' in times) content = 'bis ' + times.to; + tbody.append('') + } + } + if ('measurements' in facts.times) { + tbody.append(''); + for (var day in facts.times.measurements) { + var times = facts.times.measurements[day]; + day = formatDate('D, j.', parseDate(day)); + var content = ''; + if ('from' in times && 'to' in times) content = times.from + ' bis ' + times.to; // TODO: + else if ('from' in times) content = 'ab ' + times.from; + else if ('to' in times) content = 'bis ' + times.to; + tbody.append('') + } + } + if ('helmmeeting' in facts.times) { + tbody.append(''); + for (var day in facts.times.helmmeeting) { + var time = facts.times.helmmeeting[day]; + day = formatDate('D, j.', parseDate(day)); + tbody.append('') + } + } + if ('firststart' in facts.times) { + tbody.append(''); + for (var day in facts.times.firststart) { + var time = facts.times.firststart[day]; + day = formatDate('D, j.', parseDate(day)); + tbody.append('') + } + } + if ('laststart' in facts.times) { + tbody.append(''); + for (var day in facts.times.laststart) { + var time = facts.times.laststart[day]; + day = formatDate('D, j.', parseDate(day)); + tbody.append('') + } + } + } + + // Camping + if ('camping' in facts) { + $('#card-camping').show(); + $('#card-camping').find('p').remove(); + if ('tent' in facts.camping) { + var content = ''; + if ('price' in facts.camping.tent && facts.camping.tent.price > 0) { + content += 'Zelten möglich für ' + (new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(facts.camping.tent.price)) + ''; + } + else if ('pricepernight' in facts.camping.tent) { + content += 'Zelten möglich für ' + (new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(facts.camping.tent.pricepernight)) + ' pro Nacht'; + } + else { + content += 'Zelten möglich und im Preis enthalten'; + } + if ('electricity' in facts.camping.tent) { + content += '
'; + if (facts.camping.tent.electricity > 0) { + content += 'Strom: ' + (new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(facts.camping.tent.electricity)) + ''; + } + else { + content += 'Strom inklusive'; + } + } + $('#card-camping').find('.content').append('

' + content + '

'); + } + if ('van' in facts.camping) { + var content = ''; + if ('price' in facts.camping.van && facts.camping.van.price > 0) { + content += 'Wohnwagen/-mobil möglich für ' + (new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(facts.camping.van.price)) + ''; + } + else if ('pricepernight' in facts.camping.van) { + content += 'Wohnwagen/-mobil möglich für ' + (new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(facts.camping.van.pricepernight)) + ' pro Nacht'; + } + else { + content += 'Wohnwagen/-mobil möglich und im Preis enthalten'; + } + if ('electricity' in facts.camping.van) { + content += '
'; + if (facts.camping.van.electricity > 0) { + content += 'Strom: ' + (new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(facts.camping.van.electricity)) + ''; + } + else { + content += 'Strom inklusive'; + } + } + $('#card-camping').find('.content').append('

' + content + '

'); + } + if ('beds' in facts.camping) { + var content = ''; + if ('price' in facts.camping.beds && facts.camping.beds.price > 0) { + content += 'Betten im Clubhaus vorhanden für ' + (new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(facts.camping.beds.price)) + ''; + } + else if ('pricepernight' in facts.camping.beds) { + content += 'Betten im Clubhaus vorhanden für ' + (new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(facts.camping.beds.pricepernight)) + ' pro Nacht'; + } + else { + content += 'Betten im Clubhaus vorhanden und im Preis enthalten'; + } + $('#card-camping').find('.content').append('

' + content + '

'); + } + if ('text' in facts.camping) { + var p = $('

'); + p.text(facts.camping.text); + p.html(p.html().replace(/\n/g, '
')); + $('#card-camping').find('.content').append(p); + } + } + + // Verpflegung + if ('food' in facts) { + $('#card-food').show(); + $('#card-food').find('p').remove(); + for (var day in facts.food) { + var food = facts.food[day]; + if (day == 'text') { + var p = $('

'); + p.text(food); + p.html(p.html().replace(/\n/g, '
')); + $('#card-food').find('.content').append(p); + } + else { + day = formatDate('D, j.', parseDate(day)); + var content = ''; + if ('breakfast' in food) { + content += 'Frühstück am ' + day; + if (food.breakfast > 0) content += ' für ' + (new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(food.breakfast)) + '
'; + else content += ' inklusive
'; + } + if ('dinner' in food) { + content += 'Abendessen'; + if ('dinnerdesc' in food) content += ' (' + food.dinnerdesc + ')'; + content += ' am ' + day; + if (food.dinner > 0) content += ' für ' + (new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(food.dinner)) + '
'; + else content += ' inklusive
'; + } + $('#card-food').find('.content').append('

' + content + '

'); + } + } + } + + // Weitere Informationen + if ('text' in facts) { + $('#card-text').show(); + var p = $('#card-text').find('p'); + p.text(facts.text); + p.html(p.html().replace(/\n/g, '
')); + } + } else { + $('#card-nofactsinfo').show(); + } + + hideLoader(); +} From d204acd365b813c949754a6187b6f33196113548 Mon Sep 17 00:00:00 2001 From: ostertun Date: Mon, 27 Jun 2022 11:32:11 +0200 Subject: [PATCH 2/3] regattas: scroll to today button --- server/content/regattas.php | 5 +++++ server/scripts/regattas.js | 13 ++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/server/content/regattas.php b/server/content/regattas.php index 465b908..1950863 100644 --- a/server/content/regattas.php +++ b/server/content/regattas.php @@ -14,6 +14,11 @@ $sp['output'] .= $tpl->load('card', [$content]); + // To today + $content = $tpl->load('button', [' Heute ', '#', 'html-id' => 'button-totoday']); + + $sp['output'] .= $tpl->load('card', [$content]); + // Regattas $content = '

'; $content .= $tpl->load('input', ['html-id' => 'input-search', 'placeholder' => 'Suche', 'type' => 'text', 'css-class' => 'mt-2']); diff --git a/server/scripts/regattas.js b/server/scripts/regattas.js index 076b786..17adcf0 100644 --- a/server/scripts/regattas.js +++ b/server/scripts/regattas.js @@ -1,3 +1,10 @@ +Element.prototype.documentOffsetTop = function() { + return this.offsetTop + (this.offsetParent ? this.offsetParent.documentOffsetTop() : 0); +}; +function scrollToToday() { + window.scrollTo({ top: document.getElementById('div-today').documentOffsetTop() - (window.innerHeight / 2), behavior: 'smooth' }); +} + function selectChange(callSiteScript = true) { var val = $('#select-year').val(); if (val == "user") { @@ -60,7 +67,7 @@ async function drawList () { var list = ''; rows.forEach(function (entry) { if (entry == null) { - list += '
Heute ist der ' + formatDate('d.m.Y', today) + '
'; + list += '
Heute ist der ' + formatDate('d.m.Y', today) + '
'; } else if (search($('#input-search').val(), entry.keywords)) { list += entry.content; } @@ -76,6 +83,7 @@ var siteScript = async function() { $('#select-year').change(selectChange); $('#button-show').click(buttonShowPressed); $('#input-search').on('input', drawList); + $('#button-totoday').click(scrollToToday); } today = getToday(); @@ -84,6 +92,9 @@ var siteScript = async function() { var maxDate = parseDate($('#input-to').val()); var regattas = await dbGetRegattasRange(minDate, maxDate); + if (minDate <= today && maxDate >= today) $('#button-totoday').parent().parent().show(); + else $('#button-totoday').parent().parent().hide(); + var selectedYear = $('#select-year').val(); var years = await dbGetData('years'); From a9464c382b1bb13047cf845f2640247ce019ec3e Mon Sep 17 00:00:00 2001 From: ostertun Date: Mon, 27 Jun 2022 11:32:46 +0200 Subject: [PATCH 3/3] gitflow-release-stash: v_1.11.8 --- server/version.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/version.php b/server/version.php index 466cb44..4372d1f 100644 --- a/server/version.php +++ b/server/version.php @@ -1,5 +1,5 @@
Sollzeit' + facts.racetimes.sollzeit + ' min
Zeitlimit' + facts.racetimes.zeitlimit + ' min
Zielzeitfenster' + facts.racetimes.zielzeitfenster + ' min
Registrierung
' + day + '' + content + '
Vermessung
' + day + '' + content + '
Steuerleutebesprechung
' + day + '' + time + '
Erster Start
' + day + '' + time + '
Letzter Start
' + day + '' + time + '