menu search

时区和Timeago

Apr 30, 2017

WordPress 会在数据库中储存两种时间:第一个是本地的时间,另外一个是GMT时间。两种均采用ISO 8601格式储存。默认会输出本地的时间,也就是后台设置中选中的时区。

一般来说这么做是没什么问题的。但很尴尬的是,我设置的博客后台时区为UTC+1/+2,但访问我博客的人大部分都处于UTC+8,所以输出的时间会让人感到很奇怪。

文章的时间还好,因为大部分人并不会在意那几小时的差距。但发布评论的时候出现的时间完全对不上。

我个人其实是不支持这么储存时间的,占用数据库大小不说,WordPress似乎不会自动切换夏令时,所以我需要手动切换后台的时区。但这并不会影响到旧的文章/评论,所以它们还会处于旧的时区内。

理想的方法应该是只储存一个时间戳。由于这东西是固定的,没有时差一说,所以这些问题自然就迎刃而解了。但WordPress官方不这么做也应该有他们的理由,或者是历史的包裹导致。


前几天给主题做了下修改,大致是这样子的:

  • 输出评论的时间戳(基于GMT时间)
  • 前端通过Timeago.js转换为~“XX前”~格式

这么做的好处就是每个访客都能看到基于他的时区的时间。同时,~“XX前”~的格式更易于理解。

之所以要用GMT时间,是因为只要我准时切换后台时区,它就应该是准确的。


最后,附上输出评论时间戳的代码(需要https://developer.wordpress.org/reference/functions/wp_list_comments/

echo strtotime($comment->comment_date_gmt) * 1000;

Comments

edit x send markdown image
paragraph comment heart