使用 Date 和 Time 是程序员一个非常日常的工作,比如定时发布,定时抓取信息等。PHP 提供很多 date/time 函数,但是 WordPress 有自己的一套,下面讲解下 WordPress 中使用 Date 和 Time 的经验和坑。

时区 – Timezone

使用 date/time 第一个的要注意的时时区,很多错误都是因为这个引起的,比如定时发布的文章在错误的时间发布了(比如你想是北京时间明天早上8点发布的,但是发布在格林尼 治时间早上8点,即北京时间0点)。这种问题是非常难受的,并且非常难以去 debug,因为你得等着它再次运行才行。

WordPress 后台是可以让你设置时区的,在 设置 > 常规,并且可以使用下面代码获取:

$timezone_offet = get_option( 'gmt_offset' );

如果你的时间戳是 GMT,你可以使用下面代码转成本地时间:

$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 默认设置的时间格式:

$date_format = get_option( 'date_format' );
$time_format = get_option( 'time_format' );

下面例子以默认格式显示当前时间:

$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 方式使用它们。

via http://blog.wpjam.com/m/working-with-date-and-time-in-wordpress/

- EOF -