time标签的datetime属性必须严格符合ISO 8601格式,如“2024-05-20T14:30:00+08:00”;省略时间可仅用日期“2024-05-20”,但“2024/05/20”等非法格式将导致语义丢失。

time标签的datetime属性必须严格符合ISO 8601格式
浏览器解析 <time> 标签时,只信任 datetime 属性里合法的 ISO 8601 字符串;其他写法(比如 "2024-05-20 14:30" 缺少 T 分隔符或时区)会导致语义丢失,time 元素退化为普通内联容器,无法被屏幕阅读器、搜索引擎或日历工具识别。
实操建议:
-
datetime值必须用T分隔日期与时间,例如:<time datetime="2024-05-20T14:30:00+08:00">5月20日 下午2:30</time> - 省略时间部分时,仅保留日期(
"2024-05-20")是合法的,但不能写成"2024/05/20"或"2024年5月20日" - 若无明确时间,又想标注“当天”,不要硬凑
"2024-05-20T00:00"—— 更稳妥的是只写日期,或干脆不用<time>
不加datetime属性的time标签只是视觉强调,没有机器可读性
像 <time>发布于昨天</time> 这种写法,对人友好,但对机器毫无意义。所有辅助技术、爬虫、结构化数据提取工具都依赖 datetime 的精确值,而非文本内容。
常见错误现象:
立即学习“前端免费学习笔记(深入)”;
- Google Rich Results 测试工具提示 “Missing field ‘datePublished’” —— 很可能是因为
<time>没带datetime,或值格式非法 - 屏幕阅读器朗读出 “发布于昨天”,而不是 “2024年5月19日”,失去时间锚点
- JavaScript 用
document.querySelector('time').dateTime取到空字符串或null
用JavaScript读取time元素的时间值要小心dateTime属性的返回规则
timeElement.dateTime 返回的是原始 datetime 属性值(字符串),不是 Date 对象,也不做任何解析或标准化。它不会自动转成本地时区,也不会校验合法性。
使用场景与注意事项:
- 直接取值:若 HTML 是
<time datetime="2024-05-20T10:00Z"></time>,则el.dateTime === "2024-05-20T10:00Z" - 想转成 JS
Date对象?必须显式调用new Date(el.dateTime),且要留意 Safari 对某些 ISO 变体(如无秒数的"2024-05-20T10:00")支持不稳定 - 不要依赖
el.textContent反推时间 —— 文本可能是 “上周三”、“刚刚” 等相对表达,无法可靠还原
SEO和无障碍支持不等于自动生效,得看实际渲染与属性共存
加了 <time datetime="..."> 并不保证 Google 收录为 datePublished,也不代表 NVDA 能正确播报。关键在两点:属性值合法 + 元素出现在有意义的上下文中(比如文章头部、新闻卡片内)。
容易被忽略的地方:
- 在
<article>外孤立使用<time>(如页脚版权年份<time datetime="2024">2024</time>),多数结构化数据工具会忽略 - 动态渲染的页面中,如果 JavaScript 插入
<time>但没同步写入datetime属性,SSR 或预渲染结果里就缺失该语义 - 某些 CMS 导出 HTML 时会过滤掉
datetime属性(尤其老版本 WordPress 编辑器),需手动检查源码


















