From b0004ad39cbe46ee449dd5576f0433847e777bb7 Mon Sep 17 00:00:00 2001 From: Andy Chiang Date: Thu, 16 Oct 2025 00:48:45 +0700 Subject: [PATCH] luci-mod-system: use localized time use localized time Signed-off-by: Andy Chiang --- .../resources/view/system/system.js | 47 +++++++++++-------- .../usr/share/rpcd/acl.d/luci-mod-system.json | 5 +- 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js b/modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js index 2ed2b1fedb..40110f62f0 100644 --- a/modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js +++ b/modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js @@ -8,7 +8,7 @@ 'require tools.widgets as widgets'; var callRcList, callRcInit, callTimezone, - callGetLocaltime, callSetLocaltime, CBILocalTime; + callGetUnixtime, callSetLocaltime, CBILocalTime; callRcList = rpc.declare({ object: 'rc', @@ -29,10 +29,10 @@ callRcInit = rpc.declare({ expect: { result: false } }); -callGetLocaltime = rpc.declare({ - object: 'system', - method: 'info', - expect: { localtime: 0 } +callGetUnixtime = rpc.declare({ + object: 'luci', + method: 'getUnixtime', + expect: { result: 0 } }); callSetLocaltime = rpc.declare({ @@ -49,16 +49,17 @@ callTimezone = rpc.declare({ }); function formatTime(epoch) { - var date = new Date(epoch * 1000); - - return '%04d-%02d-%02d %02d:%02d:%02d'.format( - date.getUTCFullYear(), - date.getUTCMonth() + 1, - date.getUTCDate(), - date.getUTCHours(), - date.getUTCMinutes(), - date.getUTCSeconds() - ); + var date = new Date(epoch * 1000), + zn = uci.get('system', '@system[0]', 'zonename')?.replaceAll(' ', '_') || 'UTC', + ts = uci.get('system', '@system[0]', 'clock_timestyle'), + hc = uci.get('system', '@system[0]', 'clock_hourcycle'); + + return new Intl.DateTimeFormat(undefined, { + dateStyle: 'medium', + timeStyle: (ts == 0) ? 'long' : 'full', + hourCycle: hc, + timeZone: zn + }).format(date); } CBILocalTime = form.DummyValue.extend({ @@ -97,7 +98,7 @@ return view.extend({ return Promise.all([ callRcList('sysntpd'), callTimezone(), - callGetLocaltime(), + callGetUnixtime(), uci.load('luci'), uci.load('system') ]); @@ -106,7 +107,7 @@ return view.extend({ render: function(rpc_replies) { var ntpd_enabled = rpc_replies[0], timezones = rpc_replies[1], - localtime = rpc_replies[2], + unixtime = rpc_replies[2], m, s, o; m = new form.Map('system', @@ -129,7 +130,7 @@ return view.extend({ */ o = s.taboption('general', CBILocalTime, '_systime', _('Local Time')); - o.cfgvalue = function() { return localtime }; + o.cfgvalue = function() { return unixtime }; o.ntpd_support = ntpd_enabled; o = s.taboption('general', form.Value, 'hostname', _('Hostname')); @@ -155,6 +156,14 @@ return view.extend({ uci.set('system', section_id, 'timezone', tz); }; + o = s.taboption('general', form.Flag, 'clock_timestyle', _('Full TimeZone Name'), _('Unchecked means the timezone offset (E.g. GMT+1) is displayed')); + o.default = o.enabled; + + o = s.taboption('general', form.ListValue, 'clock_hourcycle', _('Time Format')); + o.value('', _('Default')); + o.value('h12', _('12-Hour Clock')); + o.value('h23', _('24-Hour Clock')); + /* * Logging */ @@ -309,7 +318,7 @@ return view.extend({ return m.render().then(function(mapEl) { poll.add(function() { - return callGetLocaltime().then(function(t) { + return callGetUnixtime().then(function(t) { mapEl.querySelector('#localtime').value = formatTime(t); }); }); diff --git a/modules/luci-mod-system/root/usr/share/rpcd/acl.d/luci-mod-system.json b/modules/luci-mod-system/root/usr/share/rpcd/acl.d/luci-mod-system.json index c61338893b..379d89fc6f 100644 --- a/modules/luci-mod-system/root/usr/share/rpcd/acl.d/luci-mod-system.json +++ b/modules/luci-mod-system/root/usr/share/rpcd/acl.d/luci-mod-system.json @@ -3,9 +3,8 @@ "description": "Grant access to system configuration", "read": { "ubus": { - "luci": [ "getLEDs", "getTimezones", "getUSBDevices" ], - "rc": [ "list" ], - "system": [ "info" ] + "luci": [ "getLEDs", "getTimezones", "getUSBDevices", "getUnixtime" ], + "rc": [ "list" ] }, "uci": [ "luci", "system" ] }, -- 2.30.2