diff --git a/views/default.handlebars b/views/default.handlebars
index f68af528..bdf6dda1 100644
--- a/views/default.handlebars
+++ b/views/default.handlebars
@@ -1394,6 +1394,7 @@
mql.addEventListener('change', function() { console.log('Dark Change'); });
*/
+
function startup() {
if ((features & 32) == 0) {
// Guard against other site's top frames (web bugs).
@@ -7244,7 +7245,10 @@
++count;
date = new Date(date.getTime() - (1000 * 60 * 60 * 24)); // Substract one day
}
- QH('p10html2', '
' + "Day" + ' | ' + "7 Day Power State" + ' |
' + x + '
');
+ // Add the language and timezone of the browser to the server so the server can localize the time correctly.
+ var tz = '';
+ try { tz = '&tz=' + encodeURIComponentEx(Intl.DateTimeFormat().resolvedOptions().timeZone); } catch (ex) {}
+ QH('p10html2', '' + "Day" + ' | ' + "7 Day Power State" + ' |
' + x + '
');
}
// Return a color for the given power state
@@ -15640,6 +15644,7 @@
return new Blob([bytes2], { type: 'application/octet-stream' }) // application/json;charset=utf-8
}
+ function getLang() { if (navigator.languages != undefined) { return navigator.languages[0]; } return navigator.language; }
function getNodeAmtVersion(node) { if ((node == null) || (node.intelamt == null) || (typeof node.intelamt.ver != 'string')) return 0; var verSplit = node.intelamt.ver.split('.'); if (verSplit.length < 2) return 0; return parseInt(verSplit[0]) + (parseInt(verSplit[1]) / 100); }
function getstore(name, val) { try { if (typeof (localStorage) === 'undefined') return val; var v = localStorage.getItem(name); if ((v == null) || (v == null)) return val; return v; } catch (e) { return val; } }
function addLink(x, f) { return '' + x + '
'; }
diff --git a/webserver.js b/webserver.js
index c362313f..e9c4e23e 100644
--- a/webserver.js
+++ b/webserver.js
@@ -5208,10 +5208,17 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
// Check if we have right to this node
if (obj.GetNodeRights(user, node.meshid, node._id) == 0) { res.sendStatus(401); return; }
- // Get local time offset
+ // See how we will convert UTC time to local time
var localTimeOffset = 0;
- if (req.query.tf != null) { localTimeOffset = parseInt(req.query.tf) }
- if (isNaN(localTimeOffset)) { localTimeOffset = 0; }
+ var timeConversionSystem = 0;
+ if ((req.query.l != null) && (req.query.tz != null)) {
+ timeConversionSystem = 1;
+ } else if (req.query.tf != null) {
+ // Get local time offset (bad way)
+ timeConversionSystem = 2;
+ localTimeOffset = parseInt(req.query.tf);
+ if (isNaN(localTimeOffset)) { localTimeOffset = 0; }
+ }
// Get the list of power events and send them
setContentDispositionHeader(res, 'application/octet-stream', 'powerevents.csv', null, 'powerevents.csv');
@@ -5220,12 +5227,17 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
for (var i in docs) {
if (docs[i].power != prevState) {
prevState = docs[i].power;
- var localTime = new Date(docs[i].time.getTime() + (localTimeOffset * 60000)).toISOString();
- localTime = localTime.substring(0, localTime.length - 1);
+ var localTime = '';
+ if (timeConversionSystem == 1) { // Good way
+ localTime = new Date(docs[i].time.getTime()).toLocaleString(req.query.l, { timeZone: req.query.tz })
+ } else if (timeConversionSystem == 2) { // Bad way
+ localTime = new Date(docs[i].time.getTime() + (localTimeOffset * 60000)).toISOString();
+ localTime = localTime.substring(0, localTime.length - 1);
+ }
if (docs[i].oldPower != null) {
- xevents.push(docs[i].time.toISOString() + ',' + localTime + ',' + docs[i].power + ',' + docs[i].oldPower);
+ xevents.push('\"' + docs[i].time.toISOString() + '\",\"' + localTime + '\",' + docs[i].power + ',' + docs[i].oldPower);
} else {
- xevents.push(docs[i].time.toISOString() + ',' + localTime + ',' + docs[i].power);
+ xevents.push('\"' + docs[i].time.toISOString() + '\",\"' + localTime + '\",' + docs[i].power);
}
}
}