我想显示具有正确 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'
你有几个选择,但没有一个是你正在寻找的。您可能需要进行一些操作。
使用默认格式化程序,您有O
(+0200)、P
或p
(+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"
您可以使用 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