使用 Date 和 Time 是程序员一个非常日常的工作,比如定时发布,定时抓取信息等。PHP 提供很多 date/time 函数,但是 WordPress 有自己的一套,下面讲解下 WordPress 中使用 Date 和 Time 的经验和坑。
时区 - Timezone
使用 date/time 第一个的要注意的时时区,很多错误都是因为这个引起的,比如定时发布的文章在错误的时间发布了(比如你想是北京时间明天早上8点发布的,但是发布在格林尼治时间早上8点,即北京时间0点)。这种问题是非常难受的,并且非常难以去 debug,因为你得等着它再次运行才行。
WordPress 后台是可以让你设置时区的,在 设置 > 常规,并且可以使用下面代码获取:
代码语言:javascript复制$timezone_offet = get_option( 'gmt_offset' );
如果你的时间戳是 GMT,你可以使用下面代码转成本地时间:
代码语言:javascript复制$timezone_offet = get_option( 'gmt_offset' );
$time = $timezone_offet * 3600;
千万不要用 time()
time()
是用来获取当前时间的 UNIX 时间戳格式,但是 WordPress 有自己用来处理时间(可以同时处理 GMT 和本地时间)的函数:current_time()
。
current_time( $type, $gmt = 0 );
这个函数返回博客的当前本地时间,可以使 MySQL 时间数据格式(YYYY-MM-DD HH:MM:SS),也可以是 UNIX 时间戳格式,第三个参数是用来设置返回 GMT 时间还是博客本地时间。
所以如果你的代码用的是 time()
,改成:current_time( 'timestamp', 1 )
,将返回 GMT 时间,如果要获取本地时间,使用 current_time( 'timestamp' )
。
Date 和 time 格式
WordPress 让我们在 设置 > 常规 修改默认的时间格式,所以我们尽量在代码使用这个格式,而不要使用 date() 来生成,除非你自己要生成特殊的格式。
使用下面代码获取 WordPress 默认设置的时间格式:
代码语言:javascript复制$date_format = get_option( 'date_format' );
$time_format = get_option( 'time_format' );
下面例子以默认格式显示当前时间:
代码语言:javascript复制$date_format = get_option( 'date_format' );
$time_format = get_option( 'time_format' );
echo date( "{$date_format} {$time_format}", current_time( 'timestamp' ) );
一句话总结:我们在 PHP 中可以使用 Date 和 Time 做很多事情,但是一定要用 WordPress 方式使用它们。