From e4ead44acbbfae045643b4b8e5aba5f737ce32d5 Mon Sep 17 00:00:00 2001 From: stqfdyr <89149493+stqfdyr@users.noreply.github.com> Date: Tue, 6 Oct 2026 21:21:01 +0800 Subject: [PATCH 1/2] =?UTF-8?q?docs:=20=E4=B8=BB=E9=A2=98=E5=BC=80?= =?UTF-8?q?=E5=8F=91=E9=A1=B5=E5=8A=A0=E7=A6=BB=E7=BA=BF=E6=97=B6=E9=95=BF?= =?UTF-8?q?=EF=BC=88last=5Fseen=5Fago=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/content/dev/theme.mdx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/content/dev/theme.mdx b/src/content/dev/theme.mdx index 3f952e5..7490d45 100644 --- a/src/content/dev/theme.mdx +++ b/src/content/dev/theme.mdx @@ -115,6 +115,13 @@ const ids = [...new Set(ping.map((p) => p.task_id))] 显示「N 天后到期」「已过期」用它,不要拿 `expires_at` 按浏览器的时钟自己算。hub 按自己所在时区的日期给 在线节点顺延到期日;访客在别的时区时,自己算会让在线节点在顺延之前显示几个小时的「已过期」。 +## 离线时长 + +每个节点还带一个 `last_seen_ago`:按 hub 的时钟算的、距最后一次上报的秒数,从未上报过为 `null`。 + +显示「离线 N 分」用它,不要拿 `last_seen` 去减浏览器的时钟。访客的时钟不准时(双系统在东八区常见快或慢 8 小时), +自己算会把刚离线的节点显示成离线 8 小时,或者离线后的头 8 小时什么都不显示。 + ## 价格与付款周期 `currency` 是货币代码,交给 `Intl.NumberFormat` 显示。hub 只检查它是三个大写字母,不核对代码是否真的存在, @@ -419,6 +426,7 @@ hub 的错误回复一律是一行中文纯文本(`Content-Type: text/plain` | `history_days` | 1.3.1 及更早 | 按 7 天处理:那些版本匿名最多只给 168 小时 | | `public_remark` | 1.3.1 及更早 | 按空字符串 | | `currency` 的格式检查 | 1.3.1 及更早 | 存下的值可能不是三个字母,`Intl` 会抛错,要兜住 | +| `last_seen_ago` | 1.3.2 及更早 | 拿 `last_seen` 和浏览器时钟自己算;`null` 是从未上报,和没有这个 key 分开判断 | `expires_in` 为 `null` 表示没有到期日,要和「没有这个 key」分开判断: From 34510b0b605006f132ff1d61f86016546cb435bc Mon Sep 17 00:00:00 2001 From: stqfdyr <89149493+stqfdyr@users.noreply.github.com> Date: Tue, 6 Oct 2026 23:05:49 +0800 Subject: [PATCH 2/2] =?UTF-8?q?docs:=20=E7=A6=BB=E7=BA=BF=E6=97=B6?= =?UTF-8?q?=E9=95=BF=E5=8F=AA=E5=9C=A8=20online=20=E4=B8=BA=20false=20?= =?UTF-8?q?=E6=97=B6=E6=98=BE=E7=A4=BA=EF=BC=9B=E6=97=A7=E7=89=88=20hub=20?= =?UTF-8?q?=E7=9A=84=20last=5Fseen=20=E4=B8=BA=200=20=E6=98=AF=E4=BB=8E?= =?UTF-8?q?=E6=9C=AA=E4=B8=8A=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/content/dev/theme.mdx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/content/dev/theme.mdx b/src/content/dev/theme.mdx index 7490d45..85f1e60 100644 --- a/src/content/dev/theme.mdx +++ b/src/content/dev/theme.mdx @@ -119,8 +119,11 @@ const ids = [...new Set(ping.map((p) => p.task_id))] 每个节点还带一个 `last_seen_ago`:按 hub 的时钟算的、距最后一次上报的秒数,从未上报过为 `null`。 -显示「离线 N 分」用它,不要拿 `last_seen` 去减浏览器的时钟。访客的时钟不准时(双系统在东八区常见快或慢 8 小时), -自己算会把刚离线的节点显示成离线 8 小时,或者离线后的头 8 小时什么都不显示。 +节点离线(`online` 为 `false`)时,显示「离线 N 分」用它,不要拿 `last_seen` 去减浏览器的时钟。访客的时钟 +不准时(双系统在东八区常见快或慢 8 小时),自己算会把刚离线的节点显示成离线 8 小时,或者算出负数。 + +在线节点也带这个值。刚重连、还没上报的节点 `online` 为 `true`,值是断开前那次上报至今的秒数,所以离线时长 +只在 `online` 为 `false` 时显示。 ## 价格与付款周期 @@ -426,7 +429,7 @@ hub 的错误回复一律是一行中文纯文本(`Content-Type: text/plain` | `history_days` | 1.3.1 及更早 | 按 7 天处理:那些版本匿名最多只给 168 小时 | | `public_remark` | 1.3.1 及更早 | 按空字符串 | | `currency` 的格式检查 | 1.3.1 及更早 | 存下的值可能不是三个字母,`Intl` 会抛错,要兜住 | -| `last_seen_ago` | 1.3.2 及更早 | 拿 `last_seen` 和浏览器时钟自己算;`null` 是从未上报,和没有这个 key 分开判断 | +| `last_seen_ago` | 1.3.2 及更早 | 拿 `last_seen` 和浏览器时钟自己算,`last_seen` 为 0 是从未上报;`null` 同样是从未上报,和没有这个 key 分开判断 | `expires_in` 为 `null` 表示没有到期日,要和「没有这个 key」分开判断: