从UTC转换为任何时区

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从UTC转换为任何时区相关的知识,希望对你有一定的参考价值。

我的linux框设置为使用UTC。给定时区和日期,我想得到日期范围,以便我可以在数据库中查询在任何给定日期创建的记录。例如,如果它现在是2018-03-24美国/丹佛时区上午9点。我想以UTC格式获取此日期的开始和结束时间。如何获得该日期开始时的UTC等效值?

<?php
$date = new DateTime(date('Y-m-d H:i:s'), new     DateTimeZone('America/Denver'));
$date->setTimezone(new DateTimeZone('UTC'));
echo $date->format('Y-m-d 00:00:00');
?>

这将返回2018-03-24 00:00:00,这是不正确的。有什么指针吗?

答案

尝试使用此功能。

 function UTCTimeToLocalTime($time, $tz = '', $FromDateFormat = 'Y-m-d H:i:s', $ToDateFormat = 'Y-m-d H:i:s')
{
    if ($tz == '')
        $tz = date_default_timezone_get();

    $utc_datetime = DateTime::createFromFormat($FromDateFormat, $time, new
        DateTimeZone('UTC'));
    $local_datetime = $utc_datetime;

    $local_datetime->setTimeZone(new DateTimeZone($tz));
    return $local_datetime->format($ToDateFormat);
}

echo UTCTimeToLocalTime('2015-07-01 13:30:00','America/Denver');



function LocalTimeToUTCTime($time, $tz = '', $FromDateFormat = 'Y-m-d H:i:s', $ToDateFormat = 'Y-m-d H:i:s')
{
    if ($tz == '')
        $tz = date_default_timezone_get();
    $utc_datetime = DateTime::createFromFormat($FromDateFormat, $time, new
        DateTimeZone($tz));
    $local_datetime = $utc_datetime;
    $local_datetime->setTimeZone(new DateTimeZone('UTC'));
    return $local_datetime->format($ToDateFormat);
}
另一答案

你在当地时间伪造DateTime构造函数:

new DateTime(date('Y-m-d H:i:s'), newDateTimeZone('America/Denver'));
             ^^^^

你告诉PHP这是丹佛当地时间,但你真的不知道。由于字符串不包含时区信息,PHP将使用default time zone

只需放下date()。它没有任何意义,只会让事情变得更难。

<?php
$date = new DateTime('now', new DateTimeZone('America/Denver'));
echo $date->format('r'), PHP_EOL;
$date->setTimezone(new DateTimeZone('UTC'));
echo $date->format('r'), PHP_EOL;
Sun, 25 Mar 2018 06:11:21 -0600
Sun, 25 Mar 2018 12:11:21 +0000

以上是关于从UTC转换为任何时区的主要内容,如果未能解决你的问题,请参考以下文章

UTC 是不是遵守夏令时?

php将日期时间转换为UTC

将天、小时和分钟转换为 UTC - node.js

将 UTC 偏移量转换为时区或日期

何时使用活动转换与动态片段的模式

date-fns 将 UTC 转换为时区