我希望显示具有正确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'发布于 2021-09-21 13:12:12
您可以使用DateTime格式选项"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-21 11:54:51
你有几个选择,但没有一个是你想要的。您可能需要进行一些操作。
对于默认格式化程序,您可以使用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"https://stackoverflow.com/questions/69268109
复制相似问题