Direct answer: Paste HTML or visible text and the tool lists every date string locally, classifying the label before it as publish (发布时间 / published / posted), update (更新于 / 最后更新 / updated) or unlabelled. It also shows the surrounding context so you can judge what the date is for. No network, no upload.
Study 30 found 32 of 41 cached article pages carried a date string while none said “last updated” — dates are visible, but the labels say publish. This tool turns that distinction into a small local check so a publication date is not misread as a revision date.
A date only means the text contains a date.
Whether the label says publish or update decides if it can serve as revision evidence.
No network: pasted HTML only.
Tool: paste → classify
The default sample yields three date strings: one publish, one update and one unlabelled. The third date sits right after “Last updated 2026-11-02”, but the tool first cuts the previous date, then reads the label — otherwise it would misclassify the bare date as an update.
The three label classes
| Class | Labels | Use |
|---|---|---|
| Publish | 发布时间 / 发布日期 / 发布于 / 发布 / 日期 / 时间 / published / posted | First publication; not a revision time |
| Update | 更新于 / 最后更新 / 最近更新 / 更新时间 / updated / last updated | The only label that claims an update |
| Unlabelled | No label within 24 characters before the date | May come from a list, sidebar or body; read the context |
Four common cases
- Publish only. An article header says “Published: 2026-10-30” — publication, not a recent edit.
- Bare date only. A list item or body shows 2026-10-30 without a label; it may just be a sort key.
- Update label. “Last updated 2026-11-02” is an explicit revision claim, still needing version records.
- Publish and update together. When both exist, record both; do not keep only one.
Boundaries
- No crawling: it analyses pasted content and knows nothing about status codes.
- No truth check: labels and dates can both be wrong; the tool only classifies text.
- No JavaScript execution: script-injected dates are invisible; paste rendered HTML.
- Numeric dates only: worded dates are not recognised.
- 24-character window: distant labels count as unlabelled; a preceding date is cut first to avoid bleed.
Tests and reproduction
Logic lives in js/visible-date-check.js (no dependencies, no network); scripts/test_visible_date_check.js covers 43 assertions: script/style/comment stripping, four date forms, Chinese and English publish/update labels, label distance, previous-date cut, three-class counts and empty input. Run:
node scripts/test_visible_date_check.js
Related: the visible article dates pilot (41 pages: 32 with dates, 0 update labels), the expanded article-page dates study (8 dateModified), the freshness checker (copyright, lastmod, structured dates), and the date snapshot diff (added, removed and relabelled across two snapshots).
Sources and definitions
- Visible-date definitions: study 30's rules and 18 Python unit tests.
- Label classes: publish, update, unlabelled; update only counts “updated / last updated” forms.
- Date formats: numeric dates starting with 20xx; relative times are not parsed.