del 元素的 datetime 属性必须用双引号包裹且严格遵循 iso 8601 格式,否则浏览器静默丢弃;合法格式包括纯日期、带时区偏移或 utc 的完整时间;动态生成应使用 toisostring() 等原生方法,禁用手拼或本地化字符串;该属性仅提供机器可读语义,不影响样式,但决定屏幕阅读器等工具能否正确解析删除时间。

del 的 datetime 属性必须加双引号且严格 ISO 8601
不加引号或格式非法,浏览器会静默丢弃该属性——它不会报错,但 document.querySelector('del').dateTime 会返回空字符串,所有依赖语义时间的工具(如屏幕阅读器、CMS 版本对比模块、Git diff 渲染器)都收不到有效值。
- ✅ 合法写法:
datetime="2026-08-13"(纯日期,年月日必须补零) - ✅ 推荐写法:
datetime="2026-08-13T14:30:00+08:00"(含时分秒和显式时区偏移) - ✅ UTC 场景:
datetime="2026-08-13T06:30:00Z"(Z 是字面量,不能写成+00:00或GMT) - ❌ 常见失效:
datetime=2026-08-13(缺引号)、datetime="2026/08/13"(斜杠)、datetime="2026-08-13 14:30"(缺 T 和时区)
动态生成时别用 toString() 或 toLocaleString()
前端 JS 拼接 datetime 是高危操作:手拼容易漏补零、月份错位、时区混乱;new Date().toString() 或 .toLocaleString() 输出的是本地可读字符串,不是标准 ISO 格式,直接导致语义失效。
- ✅ 安全做法:
new Date().toISOString()→ 返回类似"2026-08-13T06:30:00.123Z",截掉毫秒即可:.toISOString().slice(0, 19) + "Z" - ✅ 要本地时区(如东八区):
toISOString().slice(0, 19) + "+08:00",不要手动算偏移或依赖getTimezoneOffset() - ❌ 危险写法:
del.setAttribute("datetime", new Date().toLocaleString())→ 输出中文或斜杠格式,完全不可解析
服务端生成优先用原生时间输出函数
后端模板里用 toLocaleDateString() 或字符串拼接,大概率产出非法格式。ISO 8601 必须由语言原生时间库生成,否则极易出错。
- ✅ Python:
dt.isoformat()(默认带微秒和时区,可截断为dt.isoformat()[:19] + dt.strftime('%z')) - ✅ Node.js / Deno:
new Date().toISOString()(UTC),若需本地偏移,用Intl.DateTimeFormat提取再组装 - ✅ Django:
{{ obj.updated_at|date:"c" }}(Django 的c格式即 ISO 8601 全格式) - ❌ 手动拼接:
year + "-" + (month + 1) + "-" + date→ 漏补零、月份从 0 开始、无时区,三重风险
datetime 不影响样式,但决定语义是否成立
datetime 本身不控制下划线或删除线外观,CSS 才管这个。但它决定了机器能否理解“何时删”——这是语义命脉,不是装饰选项。
- ⚠️ 注意:
del默认是 inline 元素,若包裹<p></p>等块级内容,必须加 CSS:del { display: inline-block; },否则渲染错乱且语义边界丢失 - ⚠️ 更关键的是:
del和ins必须物理相邻,中间不能有空格、换行或文本节点,否则屏幕阅读器无法建立“删→替”配对 - ⚠️ 如果你真需要用户看到时间,
datetime不是显示手段——它只供机器读。视觉上得额外加<small>2026-08-13</small>或 title,但 title 在移动端基本不可见
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











