diff --git a/panels/logbook/ha-logbook.html b/panels/logbook/ha-logbook.html index 27f0ae11c8..b12ed1c307 100644 --- a/panels/logbook/ha-logbook.html +++ b/panels/logbook/ha-logbook.html @@ -20,7 +20,7 @@ } .time { - width: 23px; + width: 55px; font-size: .8em; color: var(--secondary-text-color); } diff --git a/src/util/hass-util.html b/src/util/hass-util.html index 81ea1148cd..19d167f31c 100644 --- a/src/util/hass-util.html +++ b/src/util/hass-util.html @@ -70,37 +70,91 @@ window.hassUtil.dynamicContentUpdater = function (root, newElementTag, attribute } }; +// Check for support of native locale string options +function toLocaleStringSupportsOptions() { + try { + new Date().toLocaleString('i'); + } catch (e) { + return e.name === 'RangeError'; + } + return false; +} +function toLocaleDateStringSupportsOptions() { + try { + new Date().toLocaleDateString('i'); + } catch (e) { + return e.name === 'RangeError'; + } + return false; +} +function toLocaleTimeStringSupportsOptions() { + try { + new Date().toLocaleTimeString('i'); + } catch (e) { + return e.name === 'RangeError'; + } + return false; +} + window.fecha.masks.haDateTime = (window.fecha.masks.shortTime + ' ' + window.fecha.masks.mediumDate); -window.hassUtil.formatDateTime = function (dateObj) { - return window.fecha.format(dateObj, 'haDateTime'); -}; +if (toLocaleStringSupportsOptions()) { + window.hassUtil.formatDateTime = function (dateObj) { + return dateObj.toLocaleString(navigator.language, { + year: 'numeric', + month: 'long', + day: 'numeric', + hour: 'numeric', + minute: '2-digit', + }); + }; +} else { + window.hassUtil.formatDateTime = function (dateObj) { + return window.fecha.format(dateObj, 'haDateTime'); + }; +} -window.hassUtil.formatDate = function (dateObj) { - return window.fecha.format(dateObj, 'mediumDate'); -}; +if (toLocaleDateStringSupportsOptions()) { + window.hassUtil.formatDate = function (dateObj) { + return dateObj.toLocaleDateString(navigator.language, + { year: 'numeric', month: 'long', day: 'numeric' }); + }; +} else { + window.hassUtil.formatDate = function (dateObj) { + return window.fecha.format(dateObj, 'mediumDate'); + }; +} -window.hassUtil.formatTime = function (dateObj) { - return window.fecha.format(dateObj, 'shortTime'); -}; +if (toLocaleTimeStringSupportsOptions()) { + window.hassUtil.formatTime = function (dateObj) { + return dateObj.toLocaleTimeString(navigator.language, + { hour: 'numeric', minute: '2-digit' }); + }; +} else { + window.hassUtil.formatTime = function (dateObj) { + return window.fecha.format(dateObj, 'shortTime'); + }; +} window.hassUtil.relativeTime = function (dateObj) { - var delta = (new Date() - dateObj) / 1000; + var delta = Math.abs(new Date() - dateObj) / 1000; + var format = new Date() > dateObj ? '%s ago' : 'in %s'; var tests = window.hassUtil.relativeTime.tests; var i; for (i = 0; i < tests.length; i += 2) { if (delta < tests[i]) { delta = Math.floor(delta); - return delta === 1 ? '1 ' + tests[i + 1] : delta + ' ' + tests[i + 1] + 's'; + return format.replace('%s', + delta === 1 ? '1 ' + tests[i + 1] : delta + ' ' + tests[i + 1] + 's'); } delta /= tests[i]; } delta = Math.floor(delta); - return delta === 1 ? '1 week' : delta + ' weeks'; + return format.replace('%s', delta === 1 ? '1 week' : delta + ' weeks'); }; window.hassUtil.relativeTime.tests = [ @@ -283,4 +337,4 @@ window.hassUtil.stateIcon = function (state) { return window.hassUtil.domainIcon(state.domain, state.state); }; - \ No newline at end of file +