飘在云端

东西南北,海角天涯

· 备查前端 · · 431次浏览

修复typecho因时间格式错误导致文章404

更新:2024-10-19 07:53:13
陆续更新了几次开发版,结果发现自定义修改全寄了好久
重新修复了不显示秒
我的环境: 顺便更新到了 Typecho v1.3.0 最新 committs 版本

不知道有没有更优雅的方法,或许可以给上游提个 PR,问问大佬们怎么处理比较妥当


环境:typecho v1.1(build 18.1.29)开发版、v1.2开发版
不确定是不是跟主题有关系,我的typecho系统设置里面,阅读/评论的时间格式设置为Y-m-d H:i:s
文章编辑时,右边的发布日期输入框的时间 js插件无法正常输入时间和加载,强制手动填写,能成功一次,但是后续任意一次修改文章,包括增、删、改操作,会直接导致文章404,这个是时间格式引起的。

用的typecho主题显示的时间格式为 Y-m-d H:i,默认情况下是没显示秒的,typecho主题是可以覆盖系统设置里面的系统的时间格式。
typecho是读取 时间戳的,这个数据保存在数据库里面,所有格式化的时间都是Unix时间戳转化过来的。

这时候去翻主题的代码,表明上的涉及到时间格式的有这些文件:post.php、page.php、archive.php、index.php 这些文件在你的主题目录里面,如 /usr/themes/xxxx,全部改成 Y-m-d H:i:s 之后,编辑/发布文章的界面右侧的 发布日期,使用了一个时间控件的js插件,提供格式化年月日时分秒Gui界面,无法正确填充 Y-m-d H:i:s,检索控制台发现报错

Error parsing the date/time string: Wrong time format

一路追踪过去,发现是在后台管理目录的路径下面 write-js.php 文件(如果没修改后台路径则是:/admin/write-js.php),初始化的时间格式没有附带秒,导致主题的时间格式填充失败,具体定位到 第十行附近:

    $('#date').mask('9999-99-99 99:99').datetimepicker({

改成

    $('#date').mask('9999-99-99 99:99:99').datetimepicker({

$(document).ready(function() {这个函数末尾,追加一行

second          :   (new Date()).getSeconds()

再修改这个文件,路径是 /admin/js/timepicker.js ,搜索字符串 HH:mm,把它改成 HH:mm:ss

保存文件实时生效,再次编辑文件,能正常加载年月日时分秒了,之前出错的404文章,重新编辑一次,发布日期重新选一次,加载回正常时间格式就能正常显示。

显示秒.png

修复问题后,就没有这个BUG了,同时时间控件恢复正常,并且从之前的 年月日 时分,变成了 年月日 时分秒,多了个秒 单位。

评论 (0条)