用PHP获取UTC时间

Rob*_*rai 112 php datetime utc

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

date("Y-m-d H:i:s", time()); 
Run Code Online (Sandbox Code Playgroud)

我会得到Unix时间戳; 但我需要根据当地时间获得UTC/GMT时间戳,字符串GMT/UTC +/- 0400或GMT/UTC +/- 1000.

nik*_*org 101

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

  • @sanmai:根据定义,Unix时间戳总是UTC.https://en.wikipedia.org/wiki/Unix_time (11认同)
  • @nikc.org:问题是 gmdate("U") 返回与 time() 相同的值,如果您的服务器系统时区不同,则返回的不是 UTC 时间戳。我能够获得真正的基于 UTC 的时间戳的唯一方法是 strtotime(gmdate("M d YH:i:s")),当您的服务器系统时区与 UTC 不同时,这与 gmdate("U") 不同 (2认同)
  • @bksi - 也许您将日期时间的内部表示与日期时间的外部表示混淆了?不带区域说明符的时间与带区域说明符的时间?正如 nikc(和文档)所说,`time()` 返回“自 Unix 纪元(1970 年 1 月 1 日 00:00:00 GMT)以来的秒数”。请注意“GMT”。事实上,默认情况下,您的系统会将其“转换”为您的时区以进行显示,这是为了方便用户。在内部,始终为 GMT。 (2认同)

Sha*_*ran 87

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

<?php
print gmdate("Y-m-d\TH:i:s\Z");
Run Code Online (Sandbox Code Playgroud)


Jes*_*edc 43

正如先前在这里找到答案,因为PHP 5.2.0可以使用DateTime类与实例指定UTC时区DateTimeZone.

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
Run Code Online (Sandbox Code Playgroud)

  • DateTime __construct()文档不再建议省略第一个参数来获取当前时间。现在它说您应该使用字符串“ now”。 (2认同)

Sud*_*oti 34

$time = time();
$check = $time+date("Z",$time);
echo strftime("%B %d, %Y @ %H:%M:%S UTC", $check);
Run Code Online (Sandbox Code Playgroud)

  • @AlainTiemblo并不完全; 你需要减去偏移量才能使它工作 (3认同)

All*_*rbo 14

date("Y-m-d H:i:s", time() - date("Z"))
Run Code Online (Sandbox Code Playgroud)


anu*_*ava 12

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

<?php
date_default_timezone_set("UTC");
?>
Run Code Online (Sandbox Code Playgroud)

这将使其余的与日期/时间相关的呼叫使用GMT/UTC时区.

  • @KhomNazid“UTC”作为参数仍然有效。https://www.php.net/manual/en/function.date-default-timezone-set.php#refsect1-function.date-default-timezone-set-parameters (2认同)

Ste*_*rya 12

获取UTC日期

gmdate("Y-m-d H:i:s");
Run Code Online (Sandbox Code Playgroud)

获取UTC时间戳

time();
Run Code Online (Sandbox Code Playgroud)

即使您date_default_timezone_set的代码也没有不同。

  • @Jordan实际上,UTC和GMT代表同一时间。/sf/ask/3426004151/ (2认同)

Ric*_*ico 5

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

$time = gmmktime();
echo date("Y-m-d H:i:s", $time); 
Run Code Online (Sandbox Code Playgroud)

gmmktime仅在您的服务器时间使用UTC时才有效.例如,我的服务器设置为US/Pacific.上面列出的函数回到了太平洋时间.

  • gmmktime() 已弃用 (4认同)

Jef*_*ett 5

根据本地时间,使用字符串 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');
Run Code Online (Sandbox Code Playgroud)

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

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

date_default_timezone_set('America/La_Paz');
echo date('c');
Run Code Online (Sandbox Code Playgroud)

2018-01-12T12:10:11-04:00

date_default_timezone_set('Australia/Brisbane');
echo date('c');
Run Code Online (Sandbox Code Playgroud)

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

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

date_default_timezone_set('America/La_Paz');
echo gmdate('c');
Run Code Online (Sandbox Code Playgroud)

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

date_default_timezone_set('Australia/Brisbane');
echo gmdate('c');
Run Code Online (Sandbox Code Playgroud)

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


小智 5

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

gmdate("Y-m-d H:i:s");
Run Code Online (Sandbox Code Playgroud)

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