datetime 属性是语义必需字段,非装饰性;必须严格使用带双引号的 iso 8601 格式(如 "2026-05-19" 或 "2026-05-19t14:22:07+08:00"),否则辅助技术和解析器将静默忽略。

datetime 属性不是装饰,是语义必需字段
只要你想让「删除」这件事对屏幕阅读器、文档比对工具或未来可能的结构化数据提取有意义,datetime 就不该省略。它不是 CSS 类名那种可有可无的修饰,而是告诉机器“这个删发生在哪一刻”的唯一标准方式。不加,辅助技术就只知道“删了”,但不知道“何时删”;加了但格式错,等于没加——浏览器不会报错,但读屏器和解析器会静默跳过整个 datetime 属性。
合法值只有一种写法:严格 ISO 8601,且必须带双引号
常见错误不是写错年月日,而是破坏格式骨架:
-
datetime="2024-05-19"✅ 合法(仅日期) -
datetime="2024-05-19T14:22:07+08:00"✅ 合法(推荐,含时区) -
datetime=2024-05-19❌ 缺引号,被忽略 -
datetime="2024/05/19"❌ 斜杠分隔,不被识别 -
datetime="2024-05-19 14:22"❌ 缺T和时区,Safari 可能不认 -
datetime="2024-05-19T14:22:07Z"✅ 合法,但仅当时间确为 UTC
前端动态生成时,别用 new Date().toString() 或手拼字符串。优先用 new Date().toISOString()(输出 UTC),或 new Date().toLocaleString('sv-SE')(输出 2024-05-19 格式),再手动补上时区偏移。
datetime 不渲染、不校验、不报错,但影响可访问性链路
浏览器本身不依赖 datetime 做任何事,也不在控制台警告你写错了——它只是安静地丢弃非法值。真正受影响的是下游工具:
- NVDA/VoiceOver 默认不朗读
datetime,但开启详细模式(如 NVDA+Shift+D)后会读出“已删除,2024年5月19日” - 某些 CMS 的修订视图靠它排序差异块,格式错会导致时间戳为空,整段修订被排到最前或最后
- 法律类页面若需存证,
datetime是 W3C 推荐的留痕方式;用text-decoration: line-through替代,等于放弃所有语义证据
注意:datetime 值不参与样式计算,改 CSS 不会影响其语义有效性;但它一旦非法,就无法被任何辅助技术或机器解析器捕获——这点容易被忽略,因为没有视觉反馈。
什么时候可以不加 datetime?
只有两种情况可省略:
- 纯内部草稿,不对外发布,也不接入任何自动化处理流程
- 内容删除不具时间敏感性,比如临时注释掉一段调试代码:
<del>console.log('debug')</del>
但只要涉及用户可见的业务变更(价格调整、API 字段下线、政策更新),就必须加,且必须合法。当前时间是 2026-05-19,如果你标记的是今天发生的删除,datetime="2026-05-19" 是底线,带时分秒和时区才是生产级写法。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











