获取PHP中的UTC时间

获取PHP中的UTC时间,php,datetime,utc,Php,Datetime,Utc,如何使用PHP的date()函数获取UTC/GMT+/-时间戳?例如,如果我尝试 date("Y-m-d H:i:s", time()); 我会得到Unix时间戳;但我需要根据本地计时获取带有字符串GMT/UTC+/-0400或GMT/UTC+/-1000的UTC/GMT时间戳。使用将始终返回GMT日期。除了调用gmdate之外,语法与date相同。您还可以将此代码放在其余代码之前: $time = time(); $check = $time+date("Z",$time); echo s

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

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

我会得到Unix时间戳;但我需要根据本地计时获取带有字符串GMT/UTC+/-0400或GMT/UTC+/-1000的UTC/GMT时间戳。

使用将始终返回GMT日期。除了调用
gmdate
之外,语法与
date

相同。您还可以将此代码放在其余代码之前:

$time = time();
$check = $time+date("Z",$time);
echo strftime("%B %d, %Y @ %H:%M:%S UTC", $check);
<?php
date_default_timezone_set("UTC");
?>


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

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

$time = gmmktime();
echo date("Y-m-d H:i:s", $time); 
只有当服务器时间使用UTC时,gmmktime才会起作用。例如,我的服务器设置为US/Pacific。上面列出的函数回溯到太平洋时间。

一个简单的就足够了

<?php
print gmdate("Y-m-d\TH:i:s\Z");
As,由于PHP5.2.0,您可以使用
DateTime
类,并使用
DateTimeZone
实例指定UTC时区

DateTime建议在创建DateTime实例并指定时区以获取当前时间时,将“now”作为第一个参数传递

$date\u utc=new\DateTime(“现在”,new\DateTimeZone(“utc”);
echo$date_utc->format(\DateTime::RFC850);#星期六,2015年4月18日03:23:46 UTC

您可以使用以下命令获取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');
根据本地计时,使用字符串GMT/UTC+/-0400或GMT/UTC+/-1000

您的自定义缺少
O
以提供与本地时间的时区偏移量

与格林威治时间(GMT)的差异(以小时为单位)示例:+0200

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

但是,为了最大限度地提高可移植性/互操作性,我建议使用日期格式
c

date_default_timezone_set('America/La_Paz');
echo date('c');
2018-01-12T12:10:11-04:00

2018-01-13T02:10:11+10:00

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

date_default_timezone_set('America/La_Paz');
echo gmdate('c');
2018-01-12T16:10:11+00:00

2018-01-12T16:10:11+00:00

获取UTC日期

gmdate("Y-m-d H:i:s");
获取UTC时间戳

time();

即使您在代码中设置了
日期\u默认值\u时区\u,结果也不会有什么不同。

在下面查找PHP代码以获取当前UTC(协调世界时)时间


@AlainTiemblo不太合适;您需要减去偏移量以使其work@sanmai:根据定义,Unix时间戳始终为UTC@nikc.org:问题在于,如果服务器系统时区不同,gmdate(“U”)返回的时间与time()相同,而time()不是UTC时间戳。我能够获得真正基于UTC的时间戳的唯一方法是strottime(gmdate(“mdy:H:i:s”)),当您的服务器系统时区不同于时,它与gmdate(“U”)不同UTC@bksi我无法重复你所描述的行为。(我的机器不在GMT上,我的UNIX时间戳是正确的。另外,
gmdate(“U”)==time()
)听起来像是潜在的错误行为。仔细检查PHP项目并提交一个bug。我使用简单的PHP脚本来测试场景:当我运行它时,我得到这个结果:1456342082==1456338482时区:3600 shell命令日期的结果是:Wed Feb 24 20:28:11 CET2016@bksi-也许您混淆了datetime的内部表示和datetime的外部表示?没有区域说明符的时间与有区域说明符的时间?正如nikc(和文档)所说,
time()
返回“自Unix纪元(1970年1月1日00:00:00 GMT)以来的秒数”。注意
GMT
。默认情况下,您的系统会将其转换为您的时区以供显示,这是一个方便用户的事实。在内部,其始终为GMT。@JeffPuckettII GMT不会因夏令时而改变。英国在夏季从GMT更改为BST,但GMT保持不变,始终与UTC匹配。DateTime _construct()文档不再建议省略第一个参数以获取当前时间。它现在说你应该使用一个字符串“now”。谢谢@PaulSkinner,我已经修改了答案。谢谢,DateTime之前的反斜杠的目的是什么?如果将此代码插入到带名称空间的代码中,假设您的文件顶部有一个
名称空间a
声明,PHP将假定
DateTime
引用
a\DateTime
,这是错误的。添加反斜杠可以解决此问题。在我看来,即使你还没有使用名称空间,这也是一个很好的习惯。@。“与date()函数相同,只是返回的时间是格林威治标准时间(GMT)”。我错过什么了吗?这些结果相等吗?@Jordan实际上UTC和GMT代表同一时间。当然
time()
返回一个整数,而
gmdate
返回一个格式化字符串。因此,只有当你小心使用它们时,它们才是“没有区别的”。从技术上讲,
gmdate
语法与
gmdate(“Y-m-dh:i:s”,time())相同
也就是说,默认情况下,格式化的时间是
time()
。在最新版本的PHP中不再如此。@KhomNazid“UTC”作为参数仍然有效。不推荐使用gmmktime()。OP声明:“我需要获取带有字符串GMT/UTC+/-0400的UTC/GMT时间戳”,如果我运行给定代码,则输出不包含此内容。此外,OP表示他想使用
date
进行此操作,而您的代码也不包含此操作。
date_default_timezone_set('Australia/Brisbane');
echo date('c');
date_default_timezone_set('America/La_Paz');
echo gmdate('c');
date_default_timezone_set('Australia/Brisbane');
echo gmdate('c');
gmdate("Y-m-d H:i:s");
time();