Convert Seconds to date format

I do this via a virtual parameter. For example I convert UpTime to a format DDd hh:mm:ss with a Virtual Parameter called UpTimeDHMS.

There may be more efficient ways to write the code, my aim is for simplicity and clarity.

// Unified across Device and InternetGatewayDevice
let v1 = declare("Device.DeviceInfo.UpTime", {value: Date.now()});
let v2 = declare("InternetGatewayDevice.DeviceInfo.UpTime", {value: Date.now()});
let totalSecs = 0
if (typeof v1.value !== "undefined") {
  totalSecs = v1.value[0];
} else {
  totalSecs = v2.value[0];
}
let days = Math.floor(totalSecs / 86400);
let rem  = totalSecs % 86400;
let hrs  = Math.floor(rem / 3600);
if (hrs < 10) {
	hrs = "0" + hrs;
}

rem  = rem % 3600;
let mins = Math.floor(rem / 60);
if (mins < 10) {
	mins = "0" + mins;
}
let secs = rem % 60;
if (secs < 10) {
	secs = "0" + secs;
}

let uptime = days + "d " + hrs + ":" + mins + ":" + secs;
return {writable: false, value: uptime};

This is how it renders:

2 Likes