To make a value available externally I make use of http-in + http-response nodes (this will create an http end-point, extemely useful to create api's), not sure if the following completely fits your request, but you can apply the gist of it.
Then you can open the http://<node-red-ip>:1880/countdown
in a browser and the countdown date will be displayed (first click the inject node to set the flow variable).
In the grafana panel javascript use the fetch api to retrieve the same page.
<script>
fetch('http://<node-red-ip>:1880/countdown')
.then((response) => response.text()
.then(countdown))
function countdown(input) {
var countDownDate = new Date(input).getTime()
var x = setInterval(()=>{ ... })
}
</script>
Example flow:
[{"id":"1349549af1259dbe","type":"http in","z":"d1354c2d336c9ebc","name":"","url":"/countdown","method":"get","upload":false,"swaggerDoc":"","x":350,"y":200,"wires":[["9b6390b07e6d525a"]]},{"id":"132b0428e9d2e51e","type":"http response","z":"d1354c2d336c9ebc","name":"","statusCode":"","headers":{},"x":710,"y":200,"wires":[]},{"id":"c0e9e9c8d46e2f59","type":"inject","z":"d1354c2d336c9ebc","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":420,"y":280,"wires":[["a3c2bd895b4eb2db"]]},{"id":"a3c2bd895b4eb2db","type":"change","z":"d1354c2d336c9ebc","name":"","rules":[{"t":"set","p":"countdown","pt":"flow","to":"","tot":"date"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":280,"wires":[[]]},{"id":"9b6390b07e6d525a","type":"function","z":"d1354c2d336c9ebc","name":"","func":"msg.payload = new Date(flow.get(\"countdown\")).toISOString()\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":550,"y":200,"wires":[["132b0428e9d2e51e"]]}]