最近奇点新搭建了一个Wordpress博客站,发布文章后,原本应该为立即发布的文章,状态变成了定时发布,时间比当前时间晚8个小时,计划发布也存在此问题。
上图是计划2022-7-23:00 发布的,但预定发布时间显示为:2022-07-22 16:00,晚了8个小时。
Mysql数据库wp_posts表,对应帖子的post_date_gmt是正确的,pos_date晚了8小时。
在安装时候,特意注意了时区问题,几个地方与时区相关的地方都设置为Asia/Shanghai
1、CentOS操作系统时区设置为Asia/Shanghai
timedatectl set-timezone Asia/Shanghai
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
执行这步后,系统local time 和时区显示为CST。
硬件时钟与操作系统时钟同步 hwclock –systohc
2、php.ini的时区设置为Asia/Shanghai
date.timezone= Asia/Shanghai
3、Wordpress的时区设置为Asia/Shanghai
管理后台->设置(wp-admin/options-general.php )中时区设置为上海
wp-settings.php
date_default_timezone_set( ‘Asia/Shanghai’ );
另外数据库时区也使用Asia/Shanghai
mysql.cnf
default-time-zone = ‘+8:00’
搜索了一下网上的各种解决方案,都不靠谱,研究代码后,可行的解决方案。
方案1:统一采用UTC
1、CentOS操作系统时区设置为UTC
timedatectl set-timezone UTC
ln -sf /usr/share/zoneinfo/UTC /etc/localtime
time 和date可以设置成北京时间,缺点是ntpdate自动同步会被同步成UTC+0时间,需要禁用ntpdate,这对日常运维不方便。
2、php.ini的时区设置为UTC
date.timezone= UTC
3、Wordpress的时区设置为UTC
管理后台->设置(wp-admin/options-general.php )中时区设置为UTC+0
wp-settings.php
date_default_timezone_set( ‘UTC’ );
方案2:依然采用UTC+8时区(Asia/Shanghai),采用wp_date替换date_i18n
由于操作系统、php、Wordpres都使用UTC+0时区,使用上总有点别扭,且有些应用需要系统及相关运行环境时区采用UTC+8。此种情况下,推荐采用wp_date替换date_i18n。
从Wordpress 5.3+起,官方推荐使用wp_date替代原来的date_i18n函数。相对于date_i18n,wp_date最大的优势是可以接受Unix timestamp,具体可以参考 date_i18n() 下面的讨论:
https://developer.wordpress.org/reference/functions/date_i18n/
导致发文章后,时间戳相对于当前时区晚8小时的代码文件是 wp-admin/includes/meta-boxes.php
批量替换wp-admin/includes/meta-boxes.php中的date_i18n为wp_date。
发表回复