Negative time is too strange thing to be real and it is not human readable. Should be avoided.
Time flows in one direction with constant speed.
The amount of time passed from last event has always represented with positive number.
You may find some clues from this:
[{"id":"23719e38.98c952","type":"function","z":"c0ddb509.b04f48","name":"","func":"let last = context.get('last') || new Date().getTime()\nlet now = new Date().getTime()\nlet delta = now -last\n\n\nfunction msToTime(s) {\n function pad(n, z) {\n z = z || 2;\n return ('00' + n).slice(-z);\n }\n\n var ms = s % 1000;\n s = (s - ms) / 1000;\n var secs = s % 60;\n s = (s - secs) / 60;\n var mins = s % 60;\n var hrs = (s - mins) / 60;\n\n return pad(hrs) + ':' + pad(mins) + ':' + pad(secs) + '.' + pad(ms, 3);\n}\n\nif(msg.topic != 'tick'){\n last = now\n context.set('last',last)\n}\n\nlet result = 'Last seen: '+msToTime(delta) +' ago'\n\n\nnode.status({shape:'dot',fill:'red',text:result})\nmsg.payload = result\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":460,"y":1700,"wires":[["6fe3c273.accbbc"]]},{"id":"7a14c895.1ef2f8","type":"inject","z":"c0ddb509.b04f48","name":"payload","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"5","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":240,"y":1700,"wires":[["23719e38.98c952"]]},{"id":"74ce754b.ee8c4c","type":"inject","z":"c0ddb509.b04f48","name":"tick every second","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"1","crontab":"","once":false,"onceDelay":0.1,"topic":"tick","payload":"","payloadType":"date","x":210,"y":1740,"wires":[["23719e38.98c952"]]},{"id":"6fe3c273.accbbc","type":"debug","z":"c0ddb509.b04f48","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":640,"y":1680,"wires":[]}]