Edit fields node - Problem

Beim Ausführen des Workflows gibt der Knoten “Felder bearbeiten” für modifyTime NULL aus (Ausdruck: {{ $json.modifyTime.substring(0, 10) }} ). Bei der manuellen Ausführung des Knotens ist die Ausgabe korrekt – siehe Anhang.

Bitte teilen Sie Ihren Workflow mit, um mehr Kontext zu liefern.

@Massimiliano_Bellini klingt so, als hätte eines der eingehenden Items kein modifyTime gesetzt, wodurch der substring-Aufruf bei undefined abbricht. Manuelle Ausführungen verwenden festgelegte Daten, aber vollständige Durchläufe verarbeiten jedes einzelne Item. Schütze den Aufruf:

{{ ($json.modifyTime ?? '').substring(0, 10) }}

Überprüfe außerdem den einspeisenden Node, er gibt wahrscheinlich Items zurück, bei denen dieses Feld fehlt.

@Massimiliano_Bellini , du kannst auch eine Nullprüfung hinzufügen

{{ $json.modifyTime ? $json.modifyTime.substring(0, 10) : null }}

Sehr einfacher Workflow

Ich habe ein Element ohne „modifyTime“ entfernt, erhalte aber bei der Ausführung des Workflows denselben NULL-Wert – bitte siehe Anhang

Hi everyone, quick update: as a workaround, I added a Date & Time node to format the date - ensuring that the node’s other inputs are also included as its output. That works well.

I still have a question: did I make a mistake in my previous workflow, or is there a bug in the Edit Fields (Set) node version 3.4?

Gute Fehlersuche, @Massimiliano_Bellini! Ich freue mich, dass die Umgehungslösung mit dem Date & Time Node Fortschritte gebracht hat.

Um deine Frage zu beantworten - das ist wahrscheinlicher eine Dateninkonsistenz als ein Fehler in Edit Fields selbst. Folgendes passiert wahrscheinlich:

Der FTP-List Node gibt Dateien vom FTP-Server zurück, und einige dieser Dateien haben möglicherweise keinen modifyTime Wert auf der Serverseite gespeichert (null oder völlig fehlend). Wenn du den Node manuell über “Execute Step” ausführst, schaust du wahrscheinlich nur das erste Element in der Testausgabe an, das einen gültigen modifyTime Wert hat. Aber in einer vollständigen Workflow-Ausführung werden alle 9 Elemente verarbeitet, und einige von ihnen haben dieses Feld nicht - daher erhältst du NULL.

Der Ausdruck {{ $json.modifyTime.substring(0, 10) }} wirft einen TypeError, wenn modifyTime null oder undefined ist, und n8n gibt in diesem Fall stillschweigend null für dieses Feld zurück.

Die richtige Lösung ist, null zu berücksichtigen, genau wie andere vorgeschlagen haben:

{{ ($json.modifyTime ?? '').substring(0, 10) }}

Oder wenn du null für Dateien ohne Änderungszeit beibehalten möchtest:

{{ $json.modifyTime ? $json.modifyTime.substring(0, 10) : null }}

Dein Ansatz mit dem Date & Time Node funktioniert auch gut, da er n8n zwingt, die Datetime-Formatierung in einem eigenen Schritt zu verarbeiten, der mit dem null-Fall eleganter umgehen kann.

Wenn dies Klarheit gebracht hat, kannst du gerne eine der Antworten als Lösung markieren, damit andere mit dem gleichen FTP + null-Feld Problem diesen Thread finden können!

Hallo Jay, danke, dass du dir Zeit für mein Problem genommen hast. Ich danke auch den anderen, die mir ihre Bewertungen und Vorschläge geschickt haben. Basierend auf dem, was ihr alle gesagt habt, bin ich zu der Überzeugung gekommen, dass das, was ich erlebe, eigentlich kein Bug ist. Aber… der FTP-Node gibt einen korrekt gesetzten “modifyTime”-Wert für jedes Element/jede Datei zurück. Bitte schau dir den neuen Test an, den ich gerade durchgeführt habe — du kannst sehen, dass das formatierte Datum in " Zeichen eingeschlossen ist

Edit Fields node - issue (debug).pdf (258,5 KB)

@Massimiliano_Bellini Danke, dass du das Debug-PDF geteilt hast! Dieses Verhalten beim Zitieren ist eigentlich sehr aussagekräftig.

Wenn das formatierte Datum als "2025-01-01" (mit wörtlichen Anführungszeichen) angezeigt wird, bedeutet das normalerweise eines von zwei Dingen:

1. Der Wert vom FTP-Node ist ein JSON-String, der bereits escaped Quotes enthält. Zum Beispiel könnte der Rohwert "2025-01-01" als String statt 2025-01-01 sein. Du kannst sie mit folgendem entfernen:

{{ $json.modifyTime.replace(/"/g, '') }}

2. Der Date & Time Node gibt einen quoted String aus, weil die Eingabe nicht als ordnungsgemäßes Date-Objekt geparst wird. Versuche, das Feld “Input” auf “Auto-detect” zu setzen oder das Eingabeformat explizit festzulegen.

Der schnellste Weg, um zu testen, welcher Fall vorliegt: Nutze in einem Code-Node direkt nach dem FTP-Node typeof $input.first().json.modifyTime. Wenn es string zurückgibt und der Wert Quotes enthält, hast du Fall 1. Entferne die Quotes, bevor du sie an den Date & Time Node weitergibst.

Du kannst es auch direkt in Edit Fields machen:

{{ $json.modifyTime?.replace(/"/g, '').substring(0, 10) }}

Das kümmert sich sowohl um das Quote-Stripping als auch um die Null Guard in einem Durchgang.

Hallo Jay, vielen Dank für dein Feedback.

Basierend darauf habe ich unmittelbar nach dem ersten Node einen weiteren Edit Fields-Node hinzugefügt (siehe die beigefügte PDF) und bekomme jetzt das korrekte formattedDate, auch wenn ich den gesamten Workflow ausführe. Gut.

Wenn ich jedoch den Ausdruck {{ $json.modifyTime.replace(/"/g, ‘’).substring(0, 10) }} im ersten Edit Fields-Node verwende, erhalte ich NULL-Werte in der OUTPUT, wenn ich den gesamten Workflow ausführe.

Edit Fields node - issue (debug 2).pdf (192.0 KB)

Die NULL-Ausgabe im ersten Edit Fields-Knoten tritt auf, weil der Ausdruck {{ $json.modifyTime.replace("/", "").substring(0, 10) }} .replace() auf einen Wert anwendet, der zu diesem Zeitpunkt möglicherweise immer noch ein Raw-Timestamp-Objekt (keine Zeichenkette) ist. Der FTP-Knoten gibt modifyTime oft als JavaScript-Date-Objekt oder als Zahl zurück, nicht als Zeichenkette, sodass .replace() stillschweigend fehlschlägt und null ausgibt. Versuchen Sie, zuerst zu konvertieren: {{ new Date($json.modifyTime).toISOString().substring(0, 10) }} - dies zwingt es zu einer ordnungsgemäßen ISO-Zeichenkette, bevor Sie slicen. Wenn modifyTime bereits eine formatierte Zeichenkette wie “2026/05/14” ist, würde {{ $json.modifyTime.replace(/\//g, "-") }} (mit Regex, nicht nur “/”) alle Schrägstriche korrekt verarbeiten.

Frage gelöst