我当前正在使用Wordpress,并且user_registered的元素返回用户的注册时间。 我设置了正确的时区,但不知道如何获取user_registered输出以匹配我的当前时间。 到目前为止,这就是我所拥有的。
date_default_timezone_set('America/Los_Angeles');
$users = get_users();
foreach( $users as $user ) {
$udata = get_userdata( $user->ID );
$registered = $udata->user_registered;
printf( '%s member since %s<br>', $udata->data->display_name, date( "Y-m-d H:i:s", strtotime( $registered ) ) );
}
echo('date below <br>');
echo date('Y-m-d H:i:s');
日期默认时区确实更改了时区(最后回显) 但是,我要更改的是$ registered的输出。 (这是存储的时间)。
如何全局更改呼叫时间的显示方式?换句话说,如果我通过插件或直接调用日期/时间戳,它将始终为我提供America / Los_Angeles的输出。
先谢谢了。我是菜鸟。
答案 0 :(得分:1)
您可以使用DateTime
函数。
http://php.net/manual/ro/datetime.settimezone.php
您的代码可以是这样的:
date_default_timezone_set('America/Los_Angeles');
$users = get_users();
foreach( $users as $user ) {
$udata = get_userdata( $user->ID );
$registered = $udata->user_registered;
$date = new DateTime(date( "Y-m-d H:i:s", strtotime( $registered )), new DateTimeZone('UTC')); //replace UTC with whatever is the timezone that the data was stored in
$date->setTimezone(new DateTimeZone('America/Los_Angeles'));
printf( '%s member since %s<br>', $udata->data->display_name, $date->format('Y-m-d H:i:s') );
}
echo('date below <br>');
echo date('Y-m-d H:i:s');
编辑:时区转换意味着指定了原始时区和目标时区。所以在这种情况下
date_default_timezone_set('America/Los_Angeles');
指定目标时区。但是您仍然需要为从数据库中检索到的值指定原始时区。 WP具有内置功能,可获取时区
get_option('timezone_string')
因此,在您的原始示例中,您可以使用一种更简单的方法,只需在strtotime()
函数中指定原始时区即可。
date_default_timezone_set('America/Los_Angeles');
$users = get_users();
foreach( $users as $user ) {
$udata = get_userdata( $user->ID );
$registered = $udata->user_registered;
printf( '%s member since %s<br>', $udata->data->display_name, date( "Y-m-d H:i:s", strtotime( $registered ." ".get_option('timezone_string')) ) );
}