Cuando se ejecuta el flujo de trabajo, el nodo Edit Fields genera NULL para modifyTime (expresión: {{ $json.modifyTime.substring(0, 10) }} ). Cuando se ejecuta el nodo manualmente, la salida es correcta - consulte lo adjunto.
Por favor, comparte tu flujo de trabajo para proporcionar más contexto
@Massimiliano_Bellini parece que uno de los elementos que llega no tiene modifyTime establecido, por lo que substring falla en undefined. Las ejecuciones manuales usan datos fijados pero las ejecuciones completas pasan por cada elemento. Protégelo:
{{ ($json.modifyTime ?? '').substring(0, 10) }}
también revisa el nodo que alimenta, probablemente devuelva elementos donde falta ese campo
@Massimiliano_Bellini , también puedes agregar una verificación nula
{{ $json.modifyTime ? $json.modifyTime.substring(0, 10) : null }}
Hola a todos, una actualización rápida: como solución alternativa, agregué un nodo Fecha y Hora para formatear la fecha, asegurándome de que las otras entradas del nodo también se incluyan en su salida. Eso funciona bien.
Aún tengo una pregunta: ¿cometí un error en mi flujo de trabajo anterior, o hay un error en el nodo Editar Campos (Establecer) versión 3.4?
¡Muy buen diagnóstico, @Massimiliano_Bellini! Me alegra que la solución alternativa con el nodo Date & Time haya funcionado.
Para responder tu pregunta - esto es más probablemente una inconsistencia de datos que un bug en Edit Fields. Aquí está lo que probablemente está sucediendo:
El nodo FTP list devuelve archivos del servidor FTP, y algunos de esos archivos pueden genuinamente no tener ningún valor modifyTime configurado en el lado del servidor (null o faltante completamente). Cuando ejecutas el nodo manualmente mediante “Execute Step”, probablemente solo estés mirando el primer elemento en la salida de prueba, que resulta tener un modifyTime válido. Pero en una ejecución de flujo completo, se procesan los 9 elementos, y algunos de ellos no tienen ese campo - por lo que obtienes NULL.
La expresión {{ $json.modifyTime.substring(0, 10) }} lanza un TypeError cuando modifyTime es null o undefined, y n8n silenciosamente devuelve null para ese campo en ese caso.
La solución adecuada es protegerse contra null, exactamente como otros sugirieron:
{{ ($json.modifyTime ?? '').substring(0, 10) }}
O si quieres preservar el null para archivos sin tiempo de modificación:
{{ $json.modifyTime ? $json.modifyTime.substring(0, 10) : null }}
Tu enfoque con el nodo Date & Time también funciona bien porque obliga a n8n a manejar el formato de fecha y hora en un paso dedicado que puede lidiar con el caso null de manera más elegante.
Si esto aclara las cosas, ¡siéntete libre de marcar una de las respuestas como Solución para que otros con el mismo problema de FTP + campo null puedan encontrar este hilo!
Hola Jay, gracias por dedicar tiempo a investigar mi problema. También agradezco a los demás que me enviaron sus revisiones y sugerencias. Basándome en lo que todos han dicho, llego a la conclusión de que lo que estoy experimentando en realidad no es un error. Sin embargo… el nodo FTP devuelve un valor “modifyTime” correctamente establecido para cada elemento/archivo. Por favor, echa un vistazo a la nueva prueba que acabo de realizar — puedes ver que cuando ejecutas el flujo de trabajo, la fecha formateada está encerrada entre caracteres "
Edit Fields node - issue (debug).pdf (258.5 KB)
@Massimiliano_Bellini ¡Gracias por compartir el PDF de depuración! Ese comportamiento de envolvimiento de comillas es bastante revelador.
Cuando la fecha formateada aparece como "2025-01-01" (con caracteres de comilla literales), generalmente significa una de dos cosas:
1. El valor del nodo FTP es una cadena JSON que ya contiene comillas escapadas. Por ejemplo, el valor sin procesar podría ser "2025-01-01" como una cadena en lugar de 2025-01-01. Puedes eliminarlas con:
{{ $json.modifyTime.replace(/"/g, '') }}
2. El nodo Date & Time está generando una cadena entre comillas porque la entrada no se está analizando como un objeto de fecha adecuado. Intenta configurar el campo “Input” para usar “Auto-detect” o establece explícitamente el formato de entrada.
La forma más rápida de probar cuál es: en un nodo Code justo después del nodo FTP, registra typeof $input.first().json.modifyTime. Si devuelve string y el valor incluye comillas, tienes el caso 1. Elimina las comillas antes de pasar al nodo Date & Time.
También puedes hacerlo directamente en Edit Fields:
{{ $json.modifyTime?.replace(/"/g, '').substring(0, 10) }}
Esto se encarga tanto de eliminar las comillas como de la protección contra nulos en un solo paso.
Hola Jay, muchas gracias por tu feedback.
Basándome en eso, añadí otro nodo Edit Fields inmediatamente después del primero (ver el PDF adjunto) y ahora obtengo el formattedDate correcto incluso cuando ejecuto el flujo de trabajo completo. Bien.
En cambio, si uso la expresión {{ $json.modifyTime.replace(/"/g, ‘’).substring(0, 10) }} en el primer nodo Edit Fields, entonces obtengo valores NULL en OUTPUT cuando ejecuto el flujo de trabajo completo.
Edit Fields node - issue (debug 2).pdf (192.0 KB)
La salida NULL en el primer nodo Edit Fields ocurre porque la expresión {{ $json.modifyTime.replace("/", "").substring(0, 10) }} ejecuta .replace() en un valor que todavía puede ser un objeto de marca de tiempo sin procesar (no una cadena) en ese momento. El nodo FTP a menudo devuelve modifyTime como un objeto de Fecha de JavaScript o un número, no una cadena, por lo que .replace() falla silenciosamente y devuelve null. Intenta convertir primero: {{ new Date($json.modifyTime).toISOString().substring(0, 10) }} - esto lo fuerza a una cadena ISO adecuada antes de dividirla. Si modifyTime ya es una cadena formateada como “2026/05/14”, entonces {{ $json.modifyTime.replace(/\//g, "-") }} (con expresión regular, no solo “/”) manejaría todas las barras correctamente.




