Index: src/assets/js/guardian.js
===================================================================
--- src/assets/js/guardian.js	(revision d9ad6c564eccd0e4c23c3d8c2c8a32334f2443bc)
+++ src/assets/js/guardian.js	(revision a7bcf669de39441a2bbc7c41545fc9e17db4b233)
@@ -32,5 +32,12 @@
     catch (e) { return uri; }
   }
-  function when(s) { return String(s || '').slice(0, 16).replace('T', ' '); }
+  // The server hands over a timestamp already formatted in the site's timezone
+  // (Beheer -> Instellingen), the same clock de Krant and Berichten show. The
+  // slice is only a fallback for a row that predates that field: it shows raw
+  // UTC, which is what made a 20:20 call for help read 18:20.
+  function when(item, raw) {
+    if (item && item.when_text) return item.when_text;
+    return String(raw || '').slice(0, 16).replace('T', ' ');
+  }
   function show(id, on) { document.getElementById(id).hidden = !on; }
 
@@ -49,5 +56,5 @@
       else who.textContent = h.actor_name || handleOf(h.actor_uri, h.actor_handle);
       row.appendChild(who);
-      row.appendChild(el('span', 'when', when(h.published || h.created_at)));
+      row.appendChild(el('span', 'when', when(h, h.published || h.created_at)));
       card.appendChild(row);
       var body = el('div', 'body g-note');
@@ -197,5 +204,5 @@
       var head = el('div', 'row');
       head.appendChild(el('span', 'who grow', p.author));
-      if (p.published) head.appendChild(el('span', 'g-when', when(p.published)));
+      if (p.published) head.appendChild(el('span', 'g-when', when(p, p.published)));
       card.appendChild(head);
       var body = el('div', 'feed-body');
