【问题标题】:How to format an UTC date to use the Z (Zulu) zone designator in php?如何格式化 UTC 日期以在 php 中使用 Z (Zulu) 区域指示符?
【发布时间】:2013-06-27 18:23:26
【问题描述】:

我需要按以下格式显示和处理 UTC 日期:

2013-06-28T22:15:00Z

由于这种格式是 ISO8601 标准的一部分,我可以轻松地从上面的字符串创建 DateTime 对象。但是我找不到一种干净的方式(意味着没有字符串操作,如 substr 和 replace 等)以所需的格式呈现我的 DateTime 对象。我试图调整服务器和 php 日期时间设置,但收效甚微。我总是得到:

$date->format(DateTime::ISO8601); // gives 2013-06-28T22:15:00+00:00

是否有任何日期格式或配置设置可以为我提供所需的字符串?或者我必须手动将“Z”附加到自定义时间格式?

【问题讨论】:

  • +1 用于首先使用 DateTime。
  • 请注意,接受的答案只是在格式字符串的末尾加上一个“Z”,但这并没有给你 UTC 日期。这可能会在许多需要 GMT/UTC 时间的用例中引起问题。使用 gmdate() 的第二个答案更适合这些情况。

标签: php datetime iso8601


【解决方案1】:

不,所需格式没有特殊常量。我会使用:

$date->format('Y-m-d\TH:i:s\Z');

但您必须确保您使用的时间确实是 UTC,以避免您的应用程序中出现解释错误。

【讨论】:

  • 这是一个很好的答案,但您会建议使用 setTimeZone 来适应 UTC 吗?还是有更清洁的方法?
  • @MattJohnson 这取决于。如果时间字符串被解释为 UTC(但不包含字面上的偏移量)并且您的服务器具有与 UTC 不同的时区,setTimeZone() 将更改时间字符串的字面值。这可能不是你想要的。另一方面,如果现有时间戳要以服务器时间解释,而您想要将它们转换为 UTC 时间,则需要 setTimeZone()
  • @MattJohnson 我刚刚遇到这个问题,可以确认即使时区已经是 UTC,它仍然会显示为 +00:00
【解决方案2】:

如果你使用的是 Carbon,那么方法是:

echo $dt->toIso8601ZuluString();    
// 2019-02-01T03:45:27Z

【讨论】:

  • 我需要参数millisecond 才能通过验证echo $dt->toIso8601ZuluString('millisecond'); // 2020-11-30T10:12:00.000Z
【解决方案3】:

为了获得所需格式的 UTC 日期,您可以使用以下内容:

gmdate('Y-m-d\TH:i:s\Z', $date->format('U'));

【讨论】:

    【解决方案4】:

    PHP 8 中添加了格式字符 p

    $timestamp = new DateTimeImmutable('2013-06-28T22:15:00Z');
    echo $timestamp->format('Y-m-d\TH:i:sp');
    // 2013-06-28T22:15:00Z
    

    【讨论】:

      【解决方案5】:

      要使用面向对象样式的日期对象,您需要先将时区设置为 UTC,然后输出日期:

      function dateTo8601Zulu(\DateTimeInterface $date):string {
        return (clone $date)
          ->setTimezone(new \DateTimeZone('UTC'))
          ->format('Y-m-d\TH:i:s\Z');
      }
      

      编辑:在更改时区之前克隆对象。

      【讨论】:

      • 如果您使用 DateTime 类,您可能希望在设置时区之前克隆对象以防止更改原始对象。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-16
      • 2016-09-19
      • 2019-12-02
      • 2020-02-21
      • 2019-05-24
      • 2021-05-09
      • 1970-01-01
      相关资源
      最近更新 更多