Changeset a7bcf66 in Klonkt for src/assets/js/guardian.js


Ignore:
Timestamp:
07/28/2026 06:30:43 PM (6 weeks ago)
Author:
Robin Genis <roboburr@…>
Branches:
main
Children:
70677e96
Parents:
d9ad6c5
Message:

De Guardian PWA liep twee uur achter

Op sound-fabrics staat de tijdzone op Europe/Amsterdam, maar een hulpvraag van
20:20 stond in de PWA als 18:20. Het dashboard bouwt zijn kaarten in de browser
en sneed de rauwe UTC-string af (slice(0,16)) in plaats van hem om te rekenen.
De server geeft de tijd nu geformatteerd mee, met dezelfde formatDateTime die de
Krant en Berichten gebruiken; het afsnijden blijft alleen als terugval staan.

In formatDateTime zat een tweede probleem, dat nog niet zichtbaar was. SQLite
schrijft CURRENT_TIMESTAMP als UTC zonder dat erbij te zeggen ("2026-07-28
18:20:33"), en new Date() leest een string in die vorm als LOKALE tijd. Dat gaat
goed zolang de machine op UTC staat, wat nu toevallig zo is. Zet de VPS ooit op
Amsterdam en elke opgeslagen datum in de hele app schuift twee uur op. De parser
zegt nu expliciet UTC.

Onderweg bleek Berichten en de PWA ook niet dezelfde tijd te tonen voor dezelfde
post: 20:12 tegenover 20:20. Berichten liet zien wanneer wij de post ontvingen,
de PWA en de Krant wanneer hij geschreven is. Berichten toont nu ook de
publicatietijd. Sorteren en de "nieuw sinds je laatste bezoek"-stip blijven op
de ontvangsttijd: een post die laat federeert is nog steeds nieuw voor jou.

Changed files:
src/middleware/render.js

  • parseStamp leest een tijdstempel zonder zone als UTC
  • formatDateTime geexporteerd voor oppervlakken buiten de EJS-pagina's

src/routes/guardian.js

  • when_text bij hulpvragen en bij de tijdlijn van de wards

src/assets/js/guardian.js

  • when() gebruikt dat veld, afsnijden alleen nog als terugval

src/services/ActivityPubService.js

  • getNotifications geeft published mee naast created_at

src/views/partials/msg-item.ejs

  • toont de publicatietijd, met created_at als terugval

New file:
test/timestamps.test.js

  • de tijdzone-instelling wordt toegepast, en een SQLite-tijdstempel hangt niet af van de tijdzone van de machine

remarks: geverifieerd op de wegwerp-database met Europe/Amsterdam: Berichten en
de PWA tonen allebei 28 jul 2026, 20:20 voor dezelfde post.

-robo
Co-Authored-By: Claude Opus 4.8 <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/assets/js/guardian.js

    rd9ad6c5 ra7bcf66  
    3232    catch (e) { return uri; }
    3333  }
    34   function when(s) { return String(s || '').slice(0, 16).replace('T', ' '); }
     34  // The server hands over a timestamp already formatted in the site's timezone
     35  // (Beheer -> Instellingen), the same clock de Krant and Berichten show. The
     36  // slice is only a fallback for a row that predates that field: it shows raw
     37  // UTC, which is what made a 20:20 call for help read 18:20.
     38  function when(item, raw) {
     39    if (item && item.when_text) return item.when_text;
     40    return String(raw || '').slice(0, 16).replace('T', ' ');
     41  }
    3542  function show(id, on) { document.getElementById(id).hidden = !on; }
    3643
     
    4956      else who.textContent = h.actor_name || handleOf(h.actor_uri, h.actor_handle);
    5057      row.appendChild(who);
    51       row.appendChild(el('span', 'when', when(h.published || h.created_at)));
     58      row.appendChild(el('span', 'when', when(h, h.published || h.created_at)));
    5259      card.appendChild(row);
    5360      var body = el('div', 'body g-note');
     
    197204      var head = el('div', 'row');
    198205      head.appendChild(el('span', 'who grow', p.author));
    199       if (p.published) head.appendChild(el('span', 'g-when', when(p.published)));
     206      if (p.published) head.appendChild(el('span', 'g-when', when(p, p.published)));
    200207      card.appendChild(head);
    201208      var body = el('div', 'feed-body');
Note: See TracChangeset for help on using the changeset viewer.