Datum plus und minus ingebaut Planetensichtbarkeit
This commit is contained in:
@@ -109,12 +109,16 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && (string) ($_POST['ajax'] ?? '') ===
|
|||||||
<?php else: ?>
|
<?php else: ?>
|
||||||
<section class="card planetvis-card">
|
<section class="card planetvis-card">
|
||||||
<p class="planetvis-intro">
|
<p class="planetvis-intro">
|
||||||
Sichtbarkeit der Planeten und des Mondes über 24 Stunden fuer deinen Standard-Standort aus der Datenbank.
|
Sichtbarkeit der Planeten und des Mondes über 24 Stunden für deinen Standard-Standort aus der Datenbank.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="date-section">
|
<div class="date-section">
|
||||||
<span class="date-lbl">Datum:</span>
|
<span class="date-lbl">Datum:</span>
|
||||||
|
<button class="btn btn-secondary btn-sm" id="btnPrevMonth">-1 Monat</button>
|
||||||
|
<button class="btn btn-secondary btn-sm" id="btnPrevDay">-1 Tag</button>
|
||||||
<input type="date" id="datePicker">
|
<input type="date" id="datePicker">
|
||||||
|
<button class="btn btn-secondary btn-sm" id="btnNextDay">+1 Tag</button>
|
||||||
|
<button class="btn btn-secondary btn-sm" id="btnNextMonth">+1 Monat</button>
|
||||||
<button class="btn btn-secondary" id="btnToday">Heute</button>
|
<button class="btn btn-secondary" id="btnToday">Heute</button>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@@ -292,12 +296,41 @@ function addBest(bar, from, to, def) {
|
|||||||
|
|
||||||
const tooltip = document.getElementById('tooltip');
|
const tooltip = document.getElementById('tooltip');
|
||||||
const datePicker = document.getElementById('datePicker');
|
const datePicker = document.getElementById('datePicker');
|
||||||
|
const btnPrevMonth = document.getElementById('btnPrevMonth');
|
||||||
|
const btnPrevDay = document.getElementById('btnPrevDay');
|
||||||
|
const btnNextDay = document.getElementById('btnNextDay');
|
||||||
|
const btnNextMonth = document.getElementById('btnNextMonth');
|
||||||
const localDateStr = d => `${d.getFullYear()}-${fmt2(d.getMonth() + 1)}-${fmt2(d.getDate())}`;
|
const localDateStr = d => `${d.getFullYear()}-${fmt2(d.getMonth() + 1)}-${fmt2(d.getDate())}`;
|
||||||
const pickerDate = () => {
|
const pickerDate = () => {
|
||||||
const [y, m, d] = datePicker.value.split('-').map(Number);
|
const [y, m, d] = datePicker.value.split('-').map(Number);
|
||||||
return new Date(y, m - 1, d, 12);
|
return new Date(y, m - 1, d, 12);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function daysInMonth(year, monthIndex) {
|
||||||
|
return new Date(year, monthIndex + 1, 0).getDate();
|
||||||
|
}
|
||||||
|
|
||||||
|
function shiftPickerByDays(days) {
|
||||||
|
const base = pickerDate();
|
||||||
|
base.setDate(base.getDate() + days);
|
||||||
|
datePicker.value = localDateStr(base);
|
||||||
|
renderChart(base);
|
||||||
|
}
|
||||||
|
|
||||||
|
function shiftPickerByMonths(months) {
|
||||||
|
const base = pickerDate();
|
||||||
|
const year = base.getFullYear();
|
||||||
|
const monthIndex = base.getMonth();
|
||||||
|
const day = base.getDate();
|
||||||
|
const targetMonthIndex = monthIndex + months;
|
||||||
|
const targetYear = year + Math.floor(targetMonthIndex / 12);
|
||||||
|
const normalizedMonthIndex = ((targetMonthIndex % 12) + 12) % 12;
|
||||||
|
const clampedDay = Math.min(day, daysInMonth(targetYear, normalizedMonthIndex));
|
||||||
|
const shifted = new Date(targetYear, normalizedMonthIndex, clampedDay, 12);
|
||||||
|
datePicker.value = localDateStr(shifted);
|
||||||
|
renderChart(shifted);
|
||||||
|
}
|
||||||
|
|
||||||
async function fetchVisibilityData(localDate) {
|
async function fetchVisibilityData(localDate) {
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.set('ajax', '1');
|
formData.set('ajax', '1');
|
||||||
@@ -403,7 +436,7 @@ function renderInfoCards(localDate, data) {
|
|||||||
infoDiv.innerHTML = `
|
infoDiv.innerHTML = `
|
||||||
<div class="info-card"><strong>Standort</strong><br>${SITE_LOCATION.name}<br>${LAT.toFixed(3)}deg N | ${LNG.toFixed(3)}deg O | ${ELEV} m</div>
|
<div class="info-card"><strong>Standort</strong><br>${SITE_LOCATION.name}<br>${LAT.toFixed(3)}deg N | ${LNG.toFixed(3)}deg O | ${ELEV} m</div>
|
||||||
<div class="info-card"><strong>Sonne (${fmtDate(localDate)})</strong><br>Aufgang: ${hF(tw.sunRiseH)}<br>Untergang: ${hF(tw.sunSetH)}</div>
|
<div class="info-card"><strong>Sonne (${fmtDate(localDate)})</strong><br>Aufgang: ${hF(tw.sunRiseH)}<br>Untergang: ${hF(tw.sunSetH)}</div>
|
||||||
<div class="info-card"><strong>Dämmerung</strong><br>Buergerlich: ${hF(tw.civDawnH)} / ${hF(tw.civDuskH)}<br>Nautisch: ${hF(tw.nautDawnH)} / ${hF(tw.nautDuskH)}<br>Astronomisch: ${hF(tw.astroDawnH)} / ${hF(tw.astroDuskH)}</div>
|
<div class="info-card"><strong>Dämmerung</strong><br>Bürgerlich: ${hF(tw.civDawnH)} / ${hF(tw.civDuskH)}<br>Nautisch: ${hF(tw.nautDawnH)} / ${hF(tw.nautDuskH)}<br>Astronomisch: ${hF(tw.astroDawnH)} / ${hF(tw.astroDuskH)}</div>
|
||||||
<div class="info-card"><strong>Mond (${fmtDate(localDate)})</strong><br>${Math.round((moon.illum || 0) * 100)}% ${moon.waning ? 'abnehmend' : 'zunehmend'}<br>Phase: ${typeof moon.phase === 'number' ? moon.phase.toFixed(1) : '--'}deg</div>
|
<div class="info-card"><strong>Mond (${fmtDate(localDate)})</strong><br>${Math.round((moon.illum || 0) * 100)}% ${moon.waning ? 'abnehmend' : 'zunehmend'}<br>Phase: ${typeof moon.phase === 'number' ? moon.phase.toFixed(1) : '--'}deg</div>
|
||||||
<div class="info-card"><strong>Zeitzone</strong><br>${tzLabel}<br>${SITE_LOCATION.timezone}</div>
|
<div class="info-card"><strong>Zeitzone</strong><br>${tzLabel}<br>${SITE_LOCATION.timezone}</div>
|
||||||
`;
|
`;
|
||||||
@@ -437,6 +470,22 @@ document.getElementById('btnToday').addEventListener('click', () => {
|
|||||||
renderChart(new Date(t.getFullYear(), t.getMonth(), t.getDate(), 12));
|
renderChart(new Date(t.getFullYear(), t.getMonth(), t.getDate(), 12));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
btnPrevDay.addEventListener('click', () => {
|
||||||
|
shiftPickerByDays(-1);
|
||||||
|
});
|
||||||
|
|
||||||
|
btnNextDay.addEventListener('click', () => {
|
||||||
|
shiftPickerByDays(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
btnPrevMonth.addEventListener('click', () => {
|
||||||
|
shiftPickerByMonths(-1);
|
||||||
|
});
|
||||||
|
|
||||||
|
btnNextMonth.addEventListener('click', () => {
|
||||||
|
shiftPickerByMonths(1);
|
||||||
|
});
|
||||||
|
|
||||||
datePicker.addEventListener('input', () => {
|
datePicker.addEventListener('input', () => {
|
||||||
if (datePicker.value) {
|
if (datePicker.value) {
|
||||||
renderChart(pickerDate());
|
renderChart(pickerDate());
|
||||||
|
|||||||
Reference in New Issue
Block a user