diff --git a/src/sbbs3/js_system.c b/src/sbbs3/js_system.c
index f43888b04a1aeff10feba783d9c69b046239f400..be6d5270d97498bb09fc699224f91200da204370 100644
--- a/src/sbbs3/js_system.c
+++ b/src/sbbs3/js_system.c
@@ -47,6 +47,7 @@ enum {
 	,SYS_PROP_INETADDR
 	,SYS_PROP_LOCATION
 	,SYS_PROP_TIMEZONE
+	,SYS_PROP_TZ_OFFSET
 	,SYS_PROP_PWDAYS
 	,SYS_PROP_MINPWLEN
 	,SYS_PROP_MAXPWLEN
@@ -169,6 +170,10 @@ static JSBool js_system_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
 			sys_timezone(cfg);
 			*vp = INT_TO_JSVAL(cfg->sys_timezone);
 			break;
+		case SYS_PROP_TZ_OFFSET:
+			sys_timezone(cfg);
+			*vp = INT_TO_JSVAL(smb_tzutc(cfg->sys_timezone));
+			break;
 		case SYS_PROP_NODES:
 			*vp = INT_TO_JSVAL(cfg->sys_nodes);
 			break;
@@ -437,7 +442,10 @@ static jsSyncPropertySpec js_system_properties[] = {
 		,JSDOCSTR("Location (city, state)")
 	},
 	{	"timezone",					SYS_PROP_TIMEZONE,	SYSOBJ_FLAGS,		310
-		,JSDOCSTR("Timezone (use <i>system.zonestr()</i> to get string representation)")
+		,JSDOCSTR("Local timezone in SMB format (use <i>system.zonestr()</i> to get string representation)")
+	},
+	{	"tz_offset",				SYS_PROP_TZ_OFFSET,	SYSOBJ_FLAGS,		320
+		,JSDOCSTR("Local timezone offset, in minutes, from UTC (negative values represent zones <i>west</i> of UTC, positive values represent zones <i>east</i> of UTC)")
 	},
 	{	"pwdays",					SYS_PROP_PWDAYS,	SYSOBJ_FLAGS,		310
 		,JSDOCSTR("Days between forced user password changes (<tt>0</tt>=<i>never</i>)")