首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用纽约时区显示现场活动开始时间的正确UTC和偏移量

使用纽约时区显示现场活动开始时间的正确UTC和偏移量
EN

Stack Overflow用户
提问于 2021-09-21 11:29:04
回答 2查看 31关注 0票数 0

我希望显示具有正确UTC偏移量(纽约时区)的事件开始时间,因此通常会显示以下内容:

代码语言:javascript
复制
June 01, 2001 @ 20:00 UTC-4

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

代码语言:javascript
复制
December 01, 2001 @ 20:00 UTC-5

有没有办法做到这一点?

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

代码语言:javascript
复制
'F j, Y @ G:i'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-21 13:12:12

您可以使用DateTime格式选项"P“将小时数传递给您,然后使用sprintf格式化所需的结果。

代码语言:javascript
复制
function tzUTC(DateTimeInterface $date)
{
  $tzHours = (int)$date->format('P');
  return sprintf('UTC%+1d',$tzHours);
}

示例:

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

输出:

代码语言:javascript
复制
September 21, 2021 @ 9:10 UTC-4
票数 0
EN

Stack Overflow用户

发布于 2021-09-21 11:54:51

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

对于默认格式化程序,您可以使用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(),它返回以秒为单位的偏移量。通过一点数学运算,你就可以得到这个数字

代码语言:javascript
复制
$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"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69268109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档