【发布时间】:2019-08-25 22:12:51
【问题描述】:
有没有一种简单的方法可以在不更新配置文件的情况下获取 UTC 时间戳?
我可以通过使用 php date_default_timezone_set 来做到这一点。
我在 Yii2 中需要这个,new \DateTimeZone('UTC') 似乎不起作用。
【问题讨论】:
有没有一种简单的方法可以在不更新配置文件的情况下获取 UTC 时间戳?
我可以通过使用 php date_default_timezone_set 来做到这一点。
我在 Yii2 中需要这个,new \DateTimeZone('UTC') 似乎不起作用。
【问题讨论】:
$date = new \DateTimeZone(\Yii::$app->timeZone);
echo $date->getName().'<br>';
$date = new DateTimeZone('UTC');
echo $date->getName().'<br>';
\Yii::$app->timeZone = 'EST';
$date = new DateTimeZone(\Yii::$app->timeZone);
echo $date->getName();
使用 Yii 函数
// @var string the time zone to use for formatting time and date values.
// This can be any value that may be passed to [date_default_timezone_set()](http://www.php.net/manual/en/function.date-default-timezone-set.php)
Yii::$app->formatter->timeZone = 'UTC';
// @var string the default format string to be used to format a [[asDate()|date]]. `UTC`, `Europe/Berlin` or `America/Chicago`.
Yii::$app->formatter->defaultTimeZone = 'UTC';
// or
$formatter= new \yii\i18n\Formatter;
$formatter->defaultTimeZone = 'UTC'; // ..
【讨论】:
通常最方便的处理方式是使用Formatter 组件。如果所有日期都在同一个时区,那么您将在配置中使用 Formatter::$defaultTimezone 设置仅在一个地方进行配置(您可以跳过此设置,因为 UTC 是默认值):
'formatter' => [
'defaultTimeZone' => 'UTC',
],
那么你可以使用asTimestamp():
echo Yii::$app->getFormatter()->asTimestamp($date);
【讨论】:
您可以使用以下代码在控制器操作中设置默认时区
$UTC = new DateTimeZone("UTC");
$newTZ = new DateTimeZone("America/New_York");
$date = new DateTime( "2011-01-01 15:00:00", $UTC );
$date->setTimezone( $newTZ );
echo $date->format('Y-m-d H:i:s');
或在任何控制器操作中使用
date_default_timezone_set("Asia/Bangkok");
echo date_default_timezone_get();
【讨论】: