0

我想显示具有正确 UTC 偏移量(纽约时区)的事件开始时间,所以通常它会显示:

June 01, 2001 @ 20:00 UTC-4

但是,如果事件在夏令时开始,事件输出将自动显示 UTC-5,如纽约晚上 8 点,则为 UTC-5:

December 01, 2001 @ 20:00 UTC-5

有没有办法做到这一点?

使用 DateTime 我能得到的最接近的是不显示时区:

'F j, Y @ G:i'
4

2 回答 2

1

你有几个选择,但没有一个是你正在寻找的。您可能需要进行一些操作。

使用默认格式化程序,您有O(+0200)、Pp(+02:00) 和T(EST, MDT, +05)。请参阅时区标识符下的https://www.php.net/manual/en/datetime.format.php 。它不会添加 UTC,但您可以像 一样将其添加到自己中'F j, Y @ G:i \U\T\CP',这目前给了我"September 21, 2021 @ 7:51 UTC-04:00".

如果您只想要数字,另一种选择是自己格式化。使用 DateTime 类,您有getOffset(),它以秒为单位返回偏移量。用一点数学,你可以得到这个数字

$date = new DateTime();
$offset = $date->getOffset() / 60 / 60; // Divide by 60 seconds to a minute, 60 minutes to an hour
$formatted_date = $date->format('F j, Y @ G:i'). " UTC$offset"; 
// "September 21, 2021 @ 7:52 UTC-4"
于 2021-09-21T11:54:50.743 回答
0

您可以使用 DateTime Format Option "P" 将小时数发送给您,然后使用 sprintf 格式化所需的结果。

function tzUTC(DateTimeInterface $date)
{
  $tzHours = (int)$date->format('P');
  return sprintf('UTC%+1d',$tzHours);
}

例子:

$date = new DateTime('now',new DateTimezone('America/New_York'));
echo $date->format('F j, Y @ G:i ').tzUTC($date);

输出:

September 21, 2021 @ 9:10 UTC-4
于 2021-09-21T13:12:11.583 回答