diff --git a/src/lib/serverpulsFormat.js b/src/lib/serverpulsFormat.js
index 1d2309c..082a296 100644
--- a/src/lib/serverpulsFormat.js
+++ b/src/lib/serverpulsFormat.js
@@ -89,3 +89,9 @@ export function formatLegendTime(sec) {
if (sec === null || sec === undefined) return '–'
return F.legend.format(new Date(sec * 1000))
}
+
+// "seit"-Zeitpunkt in Warnungen, immer Berliner Zeit.
+export function formatSince(ts) {
+ if (!ts) return ''
+ return new Date(ts).toLocaleString('de-DE', { dateStyle: 'short', timeStyle: 'short', timeZone: 'Europe/Berlin' })
+}
diff --git a/src/pages/ServerpulsPage.jsx b/src/pages/ServerpulsPage.jsx
index c3e2d8a..6f227bf 100644
--- a/src/pages/ServerpulsPage.jsx
+++ b/src/pages/ServerpulsPage.jsx
@@ -4,7 +4,7 @@ import { useAuth } from '../context/AuthContext'
import { PageHeader } from '../components/ui'
import { serverpulsApi } from '../lib/serverpulsApi'
import {
- ageLabel, formatBytes, formatNumber, formatPct, usedPct,
+ ageLabel, formatBytes, formatNumber, formatPct, formatSince, usedPct,
} from '../lib/serverpulsFormat'
import Chart from '../components/serverpuls/Chart'
import Sparkline from '../components/serverpuls/Sparkline'
@@ -31,11 +31,6 @@ const METRICS = [
const LEVEL_TEXT = { ok: 'Alles ok', medium: 'Warnungen', critical: 'Critical' }
const LEVEL_LABEL = { critical: 'Critical', medium: 'Medium', low: 'Low' }
-function fmtSince(ts) {
- if (!ts) return ''
- return new Date(ts).toLocaleString('de-DE', { dateStyle: 'short', timeStyle: 'short' })
-}
-
// Verlaufswerte in Anzeigewerte umrechnen (RAM: frei -> belegt).
function displayPoints(metric, points, total) {
if (metric !== 'ram') return points
@@ -279,7 +274,7 @@ export default function ServerpulsPage() {
{LEVEL_LABEL[a.level] || a.level}
{a.title}
{a.value}
- seit {fmtSince(a.since)}
+ seit {formatSince(a.since)}
))}
diff --git a/tests/unit/serverpulsFormat.test.mjs b/tests/unit/serverpulsFormat.test.mjs
index d72ae46..8baae31 100644
--- a/tests/unit/serverpulsFormat.test.mjs
+++ b/tests/unit/serverpulsFormat.test.mjs
@@ -52,3 +52,10 @@ test('Zeitachse: deutsche Ausgabe in Europe/Berlin', () => {
assert.equal(formatLegendTime(t), '30.09.2026, 11:20')
assert.equal(formatLegendTime(null), '–')
})
+
+test('formatSince: Europe/Berlin, unabhängig von der Prozess-Zeitzone', async () => {
+ const { formatSince } = await loadModule('src/lib/serverpulsFormat.js')
+ assert.equal(formatSince(Date.UTC(2026, 6, 1, 10, 0, 0)), '01.07.26, 12:00')
+ assert.equal(formatSince(Date.UTC(2026, 0, 1, 10, 0, 0)), '01.01.26, 11:00')
+ assert.equal(formatSince(0), '')
+})