Timestamp e a forma com Node Red interpreta tempo

Tenho um pequeno teste para aprender como lidar com variáveis de tempo no Node Red. Meu teste é assim:

Na função eu tenho o seguinte código:

var d = new Date(msg.payload.triggerTimestamp);
msg.time1 = "Time is: " + d + "today";
msg.time2 = d;
return msg;

Mas observem o que acontece no debug:


A variável msg.time1 mostra a data no formato que não quero, pois quero construir um query de InfouxDB com base no horário de trigger do cron. A variável msg.time2 mostra o que eu quero, mas não posso utilizar na construção de um texto porque ela põe nome do mês, dia, ano, etc. numa forma que o InfluxDB não entende.

Pergunto: Alguém sabe explicar porque o “function node” troca a forma de interpretação de uma variável de tempo?

O teste é mesmo simples de construir. Faça o teu e diga-me se consegue entender isto…
Obrigado!

Não consigo perceber o que pretendes.

No exemplo acima, quando utilizas a variável “d” a ser carregada com “Date()”, o resultado difere a depender da utilização da variável “d” em si. Observa que em msg.time1 eu concatenei strings onde uma delas era a variável “d”. O resultado é que, ao invés de colocar na string manipulada o valor “2021-09-11T19:01:04.087Z” o valor fica descritivo como “Sat Sep 11 2021…”.

Entretanto, se eu não somar nada a variável “d”, tal como podes ver no resultado de msg.time2, o formato final da string é aquele que eu quero. A pergunta de fundo é: Como manipular uma variável carregada com Date() e obter o valor dela tipo “2021-09-11T19:01:04.087Z” e não o descritivo tal como acontece.

Não tem propriamente a ver com Node RED, é uma questão básica de Javascript (conversão de Date para String). Experimenta assim:

var d = new Date(msg.payload.triggerTimestamp);
msg.time1 = `Time is ${d.toISOString()} today`;
// ou:
msg.time2 = "Time is: " + d.toISOString() + " today";
return msg;
1 Curtiu

Resolveu, obrigado!

Eu contornei o problema da forma mais trabalhosa, que encontrei na net, veja:

var time = (date.getFullYear() + '-' + ('00' + (date.getMonth()+1)).slice(-2) + '-' + ('00' + date.getDate()).slice(-2) + 'T' + ('00' + date.getHours()).slice(-2) + ':' + ('00' + date.getMinutes()).slice(-2));

A função “toISOString()” resolve tudo… Bate sempre no meu calcanhar de Aquiles: Programação.


Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade