Php 根据时区名称显示发布时间(yii)

Php 根据时区名称显示发布时间(yii),php,date,datetime,yii,timezone,Php,Date,Datetime,Yii,Timezone,我正在开发一个社交应用程序,我想根据用户的位置时区显示发布时间。我使用过亚洲/加尔各答等时区。现在我想如果有人从美国发帖,那么我应该根据亚洲/加尔各答时区获取日期。 在config.php中I设置 $timzone=isset($_COOKIE['goalsurf_timezone'])? $_COOKIE['goalsurf_timezone'] : 'America/Los_Angeles'; date_default_timezone_set($timzone); 我有一个功能: f

我正在开发一个社交应用程序,我想根据用户的位置时区显示发布时间。我使用过亚洲/加尔各答等时区。现在我想如果有人从美国发帖,那么我应该根据亚洲/加尔各答时区获取日期。 在
config.php中
I设置

  $timzone=isset($_COOKIE['goalsurf_timezone'])? $_COOKIE['goalsurf_timezone'] : 'America/Los_Angeles';
date_default_timezone_set($timzone);
我有一个功能:

function gplustime($date)
{
    $time=strtotime($date);
    $dt = new DateTime("now", new DateTimeZone($this->timezon)); //first argument "must" be a string
    $dt->setTimestamp($time); //adjust the object to correct timestamp
    return $dt->format(yii::app()->params['dateformat'].' h:i A');
}
在数据库中,根据用户的位置保存日期。但当我显示那个日期时,它显示的是数据库中的日期。请帮忙

更新 我也试过:

function gplustime($date)
{
    $date = new DateTime($date, new DateTimeZone($this->timezon));
    return $date->format(yii::app()->params['dateformat'].' h:i A');
}

最好的方法是对数据库中存储的所有日期时间使用相同的时区,例如UTC,并在渲染时将其转换为查看器的时区:

$dt = new \DateTime($dateFromTheDB, new \DateTimeZone('UTC'));
$dt->setTimeZone(new \DateTimeZone($viewerTimeZone));
return $dt->format(yii::app()->params['dateformat'].' h:i A');

Yii论坛可能会对你有所帮助

在sql中,还可以使用
CONVERT_TZ
函数根据时区更改日期时间

SELECT `groupId`, CONVERT(`name`, CHAR(255)) as `name`, `image`, `type`, `status`, CONVERT_TZ(`addedDate`,'-6:00','".$zone."') as `addedDate` FROM `msg_user_group` WHERE `groupId` = 1;
在这个sql查询中,我使用CONVERT和CONVERT_z Convert更改列数据类型,Convert_TZ将日期时间更改为一个时区,再更改为另一个时区

    CONVERT_TZ(`addedDate`,'-6:00','".$zone."')
'addedDate' => field name
'-6:30' => my current time zone
'$zone' => here put your timezone in which datetime format is change


SELECT `groupId`, CONVERT(`name`, CHAR(255)) as `name`, `image`, `type`, `status`, CONVERT_TZ(`addedDate`,'-6:00','+5:30') as `addedDate` FROM `msg_user_group` WHERE `groupId` = 1;

在这个sql查询中,我将时区从-6:00更改为+5:30,无需执行此操作。只需将您的默认日期设置为PST并使用此