datetime属性必须是iso 8601字面量字符串,不写或格式非法则标签完全失效;合法最小单位为“2026-07-23”,带时间须用“2026-07-23t10:00:00+08:00”,t不可省、时区偏移必须含冒号,且显示文本须与datetime逻辑自洽。

datetime属性必须是ISO 8601字面量字符串
不写datetime,或写了但格式非法,<time></time>就等于没用——浏览器、爬虫、屏幕阅读器全当普通文本处理。它不是样式标签,而是语义开关,开关没打开,机器就收不到信号。
-
datetime值必须是纯字符串,不能靠JS后续赋值:Google Search Console只解析HTML初始源码,el.dateTime = "2026-07-23T10:00:00+08:00"这种动态写法在结构化数据检测中直接被忽略 - 常见非法写法:
"2026/07/23"(斜杠)、"2026-7-23"(缺前导零)、"2026-07-23 10:00"(缺T)、"2026-07-23T10:00:00GMT+8"(非标准时区) - 合法最小单位是
"2026-07-23"(纯日期),带时间必须用"2026-07-23T10:00:00+08:00"(T不可省,时区偏移必须含冒号)
显示文本和datetime值必须解耦但逻辑自洽
人看的可以是“刚刚”“发布会当天”,机器读的必须是固定时间点。二者不同没问题,但不能互相矛盾。
- 允许:
<time datetime="2026-07-23T10:00:00+08:00">今天上午10点</time>(页面生成于当日) - 禁止:
<time datetime="2026-07-23T10:00:00+08:00">昨天上午10点</time>(语义冲突,屏幕阅读器用户会困惑) - 后端模板里别用
toLocaleDateString()拼datetime——它输出"2026/7/23"这类本地格式,直接失效;应优先用toISOString().slice(0, 19) + "+08:00"或Intl.DateTimeFormat构造
时区处理是最大坑点,尤其跨时区场景
不带时区的datetime如"2026-07-23T10:00",W3C未定义“本地”是谁的本地,Chrome、Safari、NVDA解析结果可能不一致。
- 服务端渲染时,务必输出带偏移的完整格式,例如Python的
dt.isoformat()、Django的{{ obj.time|date:"c" }} - 前端JS生成时,
new Date().toISOString()返回UTC时间(末尾带Z),若需东八区时间,得手动补偏移:iso.slice(0, 19) + "+08:00",不能简单替换Z - Safari对无秒数格式(如
"2026-07-23T10:00")支持不稳定,建议统一写到秒级
哪些场景真该用time,哪些纯属画蛇添足
<time></time>不是“所有带时间字样的内容都套一层”的装饰工具,它只在需要被程序提取、排序、无障碍访问时才有价值。
- ✅ 应该用:文章发布时间、订单创建时间、活动开始时间、API返回的时间字段做前端渲染(保留原始
datetime对倒计时逻辑至关重要) - ❌ 不必用:
<time>© 2024</time>(不指代事件时间点)、倒计时数字(如"02:15:33",动态变化,非静态语义时间) - ❌ 错误用:
<time datetime="春节">春节</time>(事件名不是时间值);正确做法是<time datetime="2026-01-29">春节</time>
最常被忽略的其实是“解耦但自洽”这一条:很多人花大力气把datetime写对了,却在显示文本上随意写“刚发布”“上周”,却不检查页面是否真的在那个时间点渲染——一旦缓存、SSR时间错位,语义就崩了。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











