获取PHP中的UTC时间


get UTC time in PHP

如何使用PHP的date()函数获得UTC/GMT +/-时间戳?例如,如果我输入

date("Y-m-d H:i:s", time()); 

我将得到Unix时间戳;但我需要得到UTC/GMT时间戳与字符串GMT/UTC+/-0400或GMT/UTC+/-1000基于本地时间。

使用gmdate将始终返回GMT日期。语法与date相同

一个简单的gmdate()就足够了

<?php
print gmdate("Y-m-d'TH:i:s'Z");

如前所述,从PHP 5.2.0开始,您可以使用DateTime类并使用DateTimeZone实例指定UTC时区。

DateTime __construct()文档建议在创建DateTime实例并指定时区以获取当前时间时将"now"作为第一个参数。

$date_utc = new 'DateTime("now", new 'DateTimeZone("UTC"));
echo $date_utc->format('DateTime::RFC850); # Saturday, 18-Apr-15 03:23:46 UTC
$time = time();
$check = $time+date("Z",$time);
echo strftime("%B %d, %Y @ %H:%M:%S UTC", $check);

获取UTC日期

gmdate("Y-m-d H:i:s");

获取UTC时间

time();

即使您的代码中有date_default_timezone_set,结果也不会不同。

date("Y-m-d H:i:s", time() - date("Z"))

除了调用gmdate,您还可以将此代码放在其他代码之前:

<?php
date_default_timezone_set("UTC");
?>

这将使其余的日期/时间相关调用使用GMT/UTC时区。

可以使用不带参数的gmmktime函数获取当前UTC时间戳:

$time = gmmktime();
echo date("Y-m-d H:i:s", $time); 

gmmktime将只工作,如果您的服务器时间使用UTC。例如,我的服务器设置为US/Pacific。上面列出的函数返回太平洋时间。

使用字符串GMT/UTC +/-0400或GMT/UTC +/-1000基于本地时间

您的自定义格式只是缺少O来给您从当地时间的时区偏移。

与格林尼治时间(GMT)的时间差(小时)示例:+0200

date_default_timezone_set('America/La_Paz');
echo date('Y-m-d H:i:s O');

2018-01-12 12:10:11 -0400

然而,为了最大限度地实现可移植性/互操作性,我建议使用ISO8601日期格式c

date_default_timezone_set('America/La_Paz');
echo date('c');

2018 - 01 - 12 - t12:10:11内

date_default_timezone_set('Australia/Brisbane');
echo date('c');

2018 - 01 - 13 t02:10:11 + 10点

您也可以使用gmdate,并且时区偏移字符串将始终为+00:00

date_default_timezone_set('America/La_Paz');
echo gmdate('c');

0 2018 - 01 - 12 t16:10:11 +

date_default_timezone_set('Australia/Brisbane');
echo gmdate('c');

0 2018 - 01 - 12 t16:10:11 +

您想使用gmdate方法来获取GMT日期。

gmdate("Y-m-d H:i:s");

gmdate日期格式类似于date()方法中的格式。

您可以使用以下方法获取UTC时间:

date_default_timezone_set('Asia/Calcutta');
$current_date = date("Y/m/d g:i A");
$ist_date = DateTime::createFromFormat(
                        '"Y/m/d g:i A"',
                        $current_date,
                        new DateTimeZone('Asia/Calcutta')
                    );
$utc_date = clone $ist_date;
$utc_date->setTimeZone(new DateTimeZone('UTC'));
echo 'UTC:  ' . $utc_date->format('Y-m-d g:i A');
/**
     * Converts a local Unix timestamp to GMT
     *
     * @param   int Unix timestamp
     * @return  int
     */
    function local_to_gmt($time = '')
    {
        if ($time === '')
        {
            $time = time();
        }
        return mktime(
            gmdate('G', $time),
            gmdate('i', $time),
            gmdate('s', $time),
            gmdate('n', $time),
            gmdate('j', $time),
            gmdate('Y', $time)
        );
    }

您需要实际的时间戳(一个数字)如果你想返回UTC的数字时间戳,那么这就是我对它的理解。getTimestamp()函数非常有用。

$ts = new DateTime('NOW', new DateTimeZone('UTC')); // This could say UTC or GMT
echo $ts->getTimestamp();

我将尝试提供一些信息,作为对GMT/BST/UTC/DST/WET/CET/EET感到困惑的人的起点,但这是我对我所理解的内容的解释-非常确定它是准确的,就外行人而言。

时间戳是什么?时间戳是一个数字,相当于从1970年1月1日开始的秒数。从本质上讲,英国格林威治时间被采纳为所有国家同意采用的全球标准/基线的时间点。所以,因为GMT是在英国的某个地方被采用的,所以它恰好和UTC是一样的。

GMT vs UTC vs DST vs BST vs WET vs CET vs EETArggh !好的,重要的是要理解GMT &UTC都是一样的,因为它们以英国伦敦-格林尼治的冬天为起源。实际上,UTC = GMT+00:00。

后来,为了避免与英国和类似时区国家的时间混淆,UTC被采纳为指代1970年1月1日规则开始的最佳方式。UTC是标准。GMT是一个国家/地区的时区。

让人困惑的是什么时候有夏令时(DST)。现在,英国称之为BST(英国夏令时),这基本上是GMT+01:00的简写。欧洲(作为一个例子)也承认日光节约时间,但当他们提到这个变化时,他们不叫它BST(英国夏令时),而是根据他们所在的欧洲时区来命名。

顺便说一句,如果你想知道你当前的时区是否在夏令时,你可以这样做:-

$d = date("I");

对于"Yes I am"返回1或"0";for"No I am not"

欧洲有三个时区。有西欧时区(WET),基本上是英国和其他一些国家,因为当它旋转时,它们在地球上的位置与格林尼治时间相匹配。

然后是欧洲中部时间,这是大多数欧洲国家所在的时间(UTC+01:00),然后是欧洲东部时间(UTC+02:00)

因此,考虑到这一点,当您考虑到DST(日光节约时间)时,您可以假设每个承认它的国家都会将其当前的标准时间更新1小时。

例如,英国将变成GMT+01:00(因为我们喜欢叫它GMT),快捷方式是BST(英国夏令时)

法国将把英国的夏令时间称为UTC+01:00或WET+01:00。

法国的夏令时称为CEST(中欧夏令时),即UTC+02:00或CET+1:00(因为CET已经被称为UTC+01:00)

和东欧时间-你知道的…


我希望这能有所帮助,但显然,你需要做自己的研究。这个链接有一个很好的图形显示区域和更多信息。https://en.wikipedia.org/wiki/Central_European_Time

下面找到获取当前UTC(协调世界时间)时间的PHP代码

<?php
// Prints the day
echo gmdate("l") . "<br>";
// Prints the day, date, month, year, time, AM or PM
echo gmdate("l jS 'of F Y h:i:s A");
?>