Intermittently corrupted JavaScript Date output in Node-RED Function node
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 45/100
- Tipo de issue
- Bug
- Clareza
- Razoavelmente clara
- Status de atividade
- Ativa
- Stack de tecnologia
- javascript, node.js
- Domínio
- backend
Direção de pesquisa
Start with the provided Function-node examples and verify the behavior in a minimal standalone Node.js script using the same Date values and methods. Compare the formatted strings with getTime() to determine whether the corruption reproduces outside Node-RED and on which environment. Done means the cause is isolated or the report is narrowed to a reproducible case; the issue names no relevant source files or tests.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Version
24.22.1
Platform
Home Assistant OS
Node-RED add-on: 22.2.1
Node-RED: 5.0.9
Node.js: 24.22.1
Architecture: aarch64, Raspberry Pi 4
Mozilla FireFox
Subsystem
No response
What steps will reproduce the bug?
Description
In a Node-RED Function node, JavaScript Date objects intermittently produce corrupted string representations, even though their numeric timestamps remain correct.
For example, a timestamp is correct when retrieved using getTime(), and the object passes both instanceof Date and constructor.name === "Date". However, methods such as toISOString(), toString(), and toLocaleString() sometimes return malformed output.
Examples observed include:
Expected:
2026-10-29T12:39:10.726Z
Actual:
2026-10-29T12:3935.726Z
The problem is intermittent. The same code normally produces correct output, and the numeric timestamp remains correct when the malformed output occurs.
The issue also affects newly created Date objects, not only objects stored and retrieved through Node-RED context. This suggests that the issue may not be specific to flow.set() or flow.get().
A control test using new Date(0).toISOString() consistently produced the expected output:
1970-01-01T00:00:00.000Z
Expected behaviour
JavaScript Date methods should consistently return valid date strings corresponding to the object's numeric timestamp.
Actual behaviour
Date strings occasionally contain unexpected digits inserted into the time portion, while getTime() continues to return the correct timestamp.
Question
How often does it reproduce? Is there a required condition?
Maybe 1 out of 5 times
What is the expected behavior? Why is that the expected behavior?
Expected:
2026-10-29T12:12:18.249Z
What do you see instead?
Actual:
2026-10-29T1249208.249Z
Additional information
if you look at the HoldDateTime1 it should be written like :
2026-10-29 16:16:42 but it becomes 2026-10-29 1653:42
I log to database from a lot of nodes, and then by query the database I see the results.
This is how the sender sees it:
lastDiff:24798
timestamp:1793287002346
iso:2026-10-29T15:16:42.346Z
type:object
HoldDateTime1:2026-10-29 16:16:42
HoldDateTime2:2026-10-29 16:16:52
This is what it becomes:
holdDateTime1:2026-10-29 1653:42
holdDateTime1:Thu Oct 29 2026 1653:42 GMT+0100 (Central European Standard Time)
Timestamp1: 1793287002346
ISO2: 2026-10-29T1553:42.346Z
IsDate: true
Constructor: Date
Time: 1793287002346
ISO: 2026-10-29T1553:42.346Z
holdDateTime2:2026-10-29 1653:52
Timestamp2: 1793287012346
ISO2: 2026-10-29T1553:52.346Z
--- HoldDateTime2 ---
IsDate: true
Constructor: Date
Time: 1793287012346
ISO: 2026-10-29T1553:52.346Z
the code that creates the Flow.set()
let holdDt1 = new Date()
holdDt1.setTime(holdDt1.getTime() + lastDiff - 5000);
flow.set("HoldDateTime1",holdDt1)
msg.ReportStr += "\nlastDiff:"+ lastDiff
msg.ReportStr += "\ntimestamp:"+ holdDt1.getTime()
msg.ReportStr += "\niso:"+ holdDt1.toISOString()
msg.ReportStr += "\ntype:"+ typeof holdDt1
msg.ReportStr += "\nHoldDateTime1:" + holdDt1.toLocaleString("sv-SE")
let holdDt2 = new Date()
holdDt2.setTime(holdDt2.getTime() + lastDiff + 5000);
flow.set("HoldDateTime2", holdDt2)
msg.ReportStr += "\nHoldDateTime2:" + holdDt2.toLocaleString("sv-SE")
The code that receives via flow.get()
msg.ReportStr += "\nholdDateTime1:"+holdDateTime1.toLocaleString("sv-SE")
msg.ReportStr += "\nholdDateTime1:" + holdDateTime1
msg.ReportStr += "\nTimestamp1: " + holdDateTime1.getTime();
msg.ReportStr += "\nISO2: " + holdDateTime1.toISOString();
msg.ReportStr += "\nIsDate: " + (holdDateTime1 instanceof Date);
msg.ReportStr += "\nConstructor: " + holdDateTime1.constructor.name;
msg.ReportStr += "\nTime: " + holdDateTime1.getTime();
msg.ReportStr += "\nISO: " + Date.prototype.toISOString.call(holdDateTime1);
let holdDateTime2 = flow.get("HoldDateTime2")
msg.ReportStr += "\nholdDateTime2:"+holdDateTime2.toLocaleString("sv-SE")
msg.ReportStr += "\nTimestamp2: " + holdDateTime2.getTime();
msg.ReportStr += "\nISO2: " + holdDateTime2.toISOString();
msg.ReportStr += "\nIsDate: " + (holdDateTime2 instanceof Date);
msg.ReportStr += "\nConstructor: " + holdDateTime2.constructor.name;
msg.ReportStr += "\nTime: " + holdDateTime2.getTime();
msg.ReportStr += "\nISO: " + Date.prototype.toISOString.call(holdDateTime2);
There is only these 2 that uses "HoldDateTime1" and "HoldDateTime2"
I don't think it's the actual flow.set() and flow.get() that is the problem.
- Linguagem predominante
- JavaScript
- Estrelas
- 123k
- Forks
- 39.3k
- Merge médio
- 4d 16h
- PRs com merge (30d)
- 227
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de nodejs/node
-
http2: content-encoding is incorrectly listed in kSingleValueHeadersTalvez já em andamento @inoway46 assumiu há 1 dia. Abertaconfirmed-bug http2
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
nodejs/node#67151 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
util.parseEnv and --env-file keep a leading UTF-8 BOM in the first keyTalvez já em andamento @helmipradita assumiu há 3 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
Mantenedores costumam responder em até 1 dia
-
node:internal/inspector/network_http: `TypeError: Missing dataLength` in event when response uses `setEncoding()`Talvez livre de novo Um pull request para esta issue foi fechado sem ser mesclado. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
nodejs/node#66551 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
[Docs] `process.loadEnvFile()` does not document behaviour when variables already existTalvez já em andamento @Sepandard assumiu há 37 dias. Abertadoc
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 90/100
Mantenedores costumam responder em até 1 dia
-
Stream.prototype.forEach will block in first promise in queue before read more chunkTalvez já em andamento @mmustafasenoglu assumiu há 38 dias. Abertadoc
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
Mantenedores costumam responder em até 1 dia
Todas as issues de nodejs/node
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
bigcalendar/react-big-calendar#2823 ·
-
feature t-tooling
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 62/100
Mantenedores costumam responder em até 1 dia
-
neutral:fix
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
Mantenedores costumam responder em até 1 dia
-
documentation enhancement
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 85/100
OWASP/cve-lite-cli#1480 ·
Mantenedores costumam responder em até 2 dias