no message

This commit is contained in:
belevo\mh
2025-12-18 09:02:57 +01:00
parent ff747d1f04
commit 1699ad4e7c
2 changed files with 57 additions and 8 deletions

View File

@@ -8,6 +8,7 @@
<option value="day">Tag</option>
<option value="week">Woche</option>
<option value="month">Monat</option>
<option value="year">Jahr</option>
<option value="total">Gesamt</option>
</select>
</label>
@@ -153,6 +154,34 @@
const mi = String(d.getMinutes()).padStart(2,'0');
return `${dd}.${mm}.${yyyy} ${hh}:${mi}`;
}
function fmtDay(d) {
const dd = String(d.getDate()).padStart(2,'0');
const mm = String(d.getMonth() + 1).padStart(2,'0');
const yyyy = d.getFullYear();
return `${dd}.${mm}.${yyyy}`;
}
function monthNameDe(m) {
return ['Jan','Feb','Mär','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez'][m] || '';
}
// ISO Woche + ISO Jahr (wichtig: ISO-Jahr kann am Jahresrand abweichen)
function getISOWeekYear(date) {
const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
// Donnerstag bestimmt ISO-Jahr
d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay() || 7));
const isoYear = d.getUTCFullYear();
const yearStart = new Date(Date.UTC(isoYear, 0, 1));
const weekNo = Math.ceil((((d - yearStart) / 86400000) + 1) / 7);
return { week: weekNo, year: isoYear };
}
function showErr(e) {
const msg = (e && e.message) ? e.message : String(e);
elErr.textContent = 'JS-Fehler: ' + msg;
@@ -242,13 +271,24 @@ return `
elDate.disabled = isTotal;
if (data?.tStart && data?.tEnd) {
const s = new Date(data.tStart * 1000);
const e = new Date(data.tEnd * 1000);
elPeriod.textContent = isTotal
? 'Zeitraum: Gesamt'
: `Zeitraum: ${fmtDateTime(s)} ${fmtDateTime(e)}`;
const s = new Date(data.tStart * 1000);
if (data.range === 'total') {
elPeriod.textContent = 'Zeitraum: Gesamt';
} else if (data.range === 'day') {
elPeriod.textContent = `Zeitraum: ${fmtDay(s)}`;
} else if (data.range === 'month') {
elPeriod.textContent = `Zeitraum: ${monthNameDe(s.getMonth())} ${s.getFullYear()}`;
} else if (data.range === 'week') {
const iso = getISOWeekYear(s);
elPeriod.textContent = `Zeitraum: Woche ${iso.week} ${iso.year}`;
} else if (data.range === 'year') {
elPeriod.textContent = `Zeitraum: ${s.getFullYear()}`;
} else {
elPeriod.textContent = '';
elPeriod.textContent = '';
}
} else {
elPeriod.textContent = '';
}

View File

@@ -25,7 +25,7 @@ class Energy_Pie extends IPSModule
parent::ApplyChanges();
// ensure range valid
$range = $this->ReadAttributeString(self::ATTR_RANGE);
if (!in_array($range, ['day', 'week', 'month', 'total'], true)) {
if (!in_array($range, ['day', 'week', 'month', 'year', 'total'], true)) {
$this->WriteAttributeString(self::ATTR_RANGE, 'day');
}
// ensure date valid (not empty/invalid/future)
@@ -51,7 +51,7 @@ class Energy_Pie extends IPSModule
switch ($Ident) {
case 'SetRange':
$range = (string)$Value;
if (!in_array($range, ['day', 'week', 'month', 'total'], true)) {
if (!in_array($range, ['day', 'week', 'month', 'year', 'total'], true)) {
return;
}
$this->WriteAttributeString(self::ATTR_RANGE, $range);
@@ -137,6 +137,12 @@ class Energy_Pie extends IPSModule
$start = strtotime(date('Y-m-01 00:00:00', $base));
$end = strtotime(date('Y-m-01 00:00:00', strtotime('+1 month', $start)));
return [$start, $end];
case 'year':
$start = strtotime(date('Y-01-01 00:00:00', $base));
$end = strtotime(date('Y-01-01 00:00:00', strtotime('+1 year', $start)));
return [$start, $end];
default:
return [$base, $base + 86400];
}
@@ -227,6 +233,9 @@ class Energy_Pie extends IPSModule
case 'month':
$base = strtotime(($sign === -1 ? '-1 month' : '+1 month'), $base);
break;
case 'year':
$base = strtotime(($sign === -1 ? '-1 year' : '+1 year'), $base);
break;
}
$this->WriteAttributeString(self::ATTR_DATE, date('Y-m-d', $base));
}