订阅器里所有文章的时间都显示 1970 年 1 月 1 日,按时间排序全乱,feed 校验工具标了一行 invalid date。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
echo '<pubDate>' . mysql2date('D, d M Y H:i:s O', $post->post_date) . '</pubDate>';
pubDate 要的是 RFC 822 格式,像带星期、月份缩写和时区偏移的那种写法,直接写 ISO 日期解析不了。时区偏移漏写时,阅读器会按 UTC 处理,差出八小时。这一点先确认清楚,后面就不用反复试。
「feed 日期格式」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
具体做法是,用 mysql2date 按 RFC 822 的格式串生成,别自己拼;时区偏移必须带上,不能省;生成后丢进校验器看一遍,日期这一项最容易报错。
改完照着核一遍,阅读器里时间显示为当天日期,排序与站点一致。
