|
|
@@ -0,0 +1,55 @@
|
|
|
+# Tijdzone-fix voor `evenementen/create` en `stadsactiviteiten/create` (Drupal 7, custom.module)
|
|
|
+
|
|
|
+**Symptoom (gemeten 2026-09-13, nid 217916):** de app stuurt
|
|
|
+`"datum_start":"2026-09-25 20:20:00"` (lokale Nederlandse tijd), de site toont
|
|
|
+**22:20**. Drupal leest de string als UTC en rendert in Europe/Amsterdam.
|
|
|
+
|
|
|
+**Fix — in `custom.evenementen_aanmaken.inc`, op de plek waar `datum_start`
|
|
|
+(en `datum_eind`) naar `field_date` gaat.** Interpreteer de binnenkomende
|
|
|
+string expliciet als Amsterdamse tijd en sla 'm als UTC op (Date-veld met
|
|
|
+`timezone_db = UTC`, de gebruikelijke instelling):
|
|
|
+
|
|
|
+```php
|
|
|
+/**
|
|
|
+ * Zet een lokale (Europe/Amsterdam) datumstring om naar de UTC-string die
|
|
|
+ * een Date-veld met timezone_db = 'UTC' verwacht.
|
|
|
+ */
|
|
|
+function _custom_lokaal_naar_utc($s) {
|
|
|
+ $s = trim($s);
|
|
|
+ if ($s === '') {
|
|
|
+ return '';
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ $d = new DateTime($s, new DateTimeZone('Europe/Amsterdam'));
|
|
|
+ }
|
|
|
+ catch (Exception $e) {
|
|
|
+ return $s; // ongeldig formaat: laat de bestaande validatie het afvangen
|
|
|
+ }
|
|
|
+ $d->setTimezone(new DateTimeZone('UTC'));
|
|
|
+ return $d->format('Y-m-d H:i:s');
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+en dan waar de waarde gezet wordt (naam van de variabelen kan afwijken):
|
|
|
+
|
|
|
+```php
|
|
|
+$start = _custom_lokaal_naar_utc($data['datum_start']);
|
|
|
+$eind = !empty($data['datum_eind']) ? _custom_lokaal_naar_utc($data['datum_eind']) : $start;
|
|
|
+$node->field_date[LANGUAGE_NONE][0]['value'] = $start;
|
|
|
+$node->field_date[LANGUAGE_NONE][0]['value2'] = $eind;
|
|
|
+$node->field_date[LANGUAGE_NONE][0]['timezone'] = 'Europe/Amsterdam';
|
|
|
+$node->field_date[LANGUAGE_NONE][0]['timezone_db'] = 'UTC';
|
|
|
+```
|
|
|
+
|
|
|
+**Controleer eerst** hoe het veld is ingesteld: `timezone_db` van
|
|
|
+`field_date` (Structure → Content types → Evenement → field_date → "Time zone
|
|
|
+handling"). Staat die op *"No time zone conversion"* / `timezone_db = ''`, dan
|
|
|
+is de fix juist omgekeerd: dan moet de string ongewijzigd opgeslagen worden en
|
|
|
+zit de +2u in de *weergave* (views-datumformat met tijdzone).
|
|
|
+
|
|
|
+**Verificatie:** één testevenement indienen met 20:20 en in
|
|
|
+`flutterflow_events.json?nid=<nid>` moet `datum` op `20:20` uitkomen. Dezelfde
|
|
|
+route geldt voor `stadsactiviteiten/create` (zelfde helper hergebruiken).
|
|
|
+
|
|
|
+**Aan de app-kant is niets nodig** — die stuurt bewust lokale tijd; als je hier
|
|
|
+UTC gaat verwachten, moet `datumVoorApi`/de Date-Format-binding in de app mee.
|