datetime属性必须为字面量iso 8601字符串,动态生成无效;合法格式仅五种:仅日期、日期+时间(带时区)、utc时间、仅时间、持续时间;显示文本与datetime须逻辑自洽;js读取需兼容处理。

datetime属性必须是字面量ISO 8601字符串,不能动态生成
浏览器和爬虫只读取HTML初始源码里的datetime值,JS后续赋值或模板运行时拼接都无效。Google Search Console、W3C Validator、RSS阅读器等工具根本看不到动态塞进去的内容。
- 后端渲染时,用框架原生ISO格式化方法:Python的
.isoformat()、PHP的date('c')、Node.js的toISOString() - 前端JS生成时间时,别用
toLocaleString()或手拼字符串——它输出不可控,且极易漏前导零、混用空格或斜杠 - 绝对禁止:
el.setAttribute('datetime', new Date().toLocaleString()),这种值形如"2026/8/10 下午11:14:00",机器直接跳过 - 正确做法:
el.dateTime = new Date().toISOString().slice(0, 19) + '+08:00'(注意:dateTime是JS属性名,datetime是HTML属性名)
格式错一个字符就失效,合法写法只有五种
不是“看起来像日期就行”,而是必须字面匹配ISO 8601标准。浏览器不报错,但document.querySelector('time').dateTime返回空字符串,结构化数据提取器直接忽略该节点。
- 仅日期:
"2026-08-10"(必须补零,"2026-8-10"或"2026/08/10"非法) - 日期+时间(推荐带时区):
"2026-08-10T23:14:00+08:00"(T必须大写、无空格;时区必须±HH:MM,不能CST或GMT+8) - UTC时间:
"2026-08-10T15:14:00Z"(末尾Z不可替换为+00:00以外的写法) - 仅时间(限上下文已知日期):
"23:14"或"23:14:00"(不能单独用于文章发布时间) - 持续时间:
"PT2H30M"(用于视频时长、服务周期等,非时间点)
显示文本和datetime值必须解耦,但逻辑要自洽
datetime给人机读,标签内文本给人看,二者可以完全不同,但不能违背常识。搜索引擎会交叉验证,明显矛盾会降低信任分。
- 允许:
<time datetime="2026-08-10T23:14:00+08:00">刚刚</time>(配合JS更新textContent,但datetime保持不变) - 允许:
<time datetime="2026-08-10">今天</time>(页面确实在当天生成) - 禁止:
<time datetime="2026-08-10">下周三</time>(语义冲突,机器无法对齐) - 禁止:
<time datetime="next Monday">下周一</time>(next Monday不是ISO字符串,解析失败)
JS读取datetime时,兼容性和解析陷阱多
直接new Date(el.dateTime)在IE中报错,在Safari中对无秒格式支持不稳定。安全读取必须先校验格式再构造。
- IE不支持
el.dateTime属性,必须用el.getAttribute('datetime') - 仅日期格式(如
"2026-08-10")在Safari中可能被解析为UTC时间,而非本地时间 - 稳妥做法:先取字符串,再手动补全时区或时间部分,例如
const dtStr = el.getAttribute('datetime'); const full = dtStr.includes('T') ? dtStr : dtStr + 'T00:00:00+08:00'; new Date(full) - 不要依赖
Date.parse()自动推断——不同引擎行为不一致,尤其对缺时区或缺秒的格式
time标签的datetime值如果大量重复、格式混乱或缺失,爬虫不会报错,但会静默降低对该页所有时间字段的信任权重——它不是单点失效,而是整页语义可信度滑坡。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











