首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ics日期/时间格式在php中管理时区

使用ics日期/时间格式在php中管理时区
EN

Stack Overflow用户
提问于 2010-04-09 23:10:33
回答 2查看 6.7K关注 0票数 3

好了,我正在使用ICS解析器实用程序来解析google日历ICS文件。它工作得很好,除了google给我提供了UCT事件的时间。所以我现在需要减去5个小时,当夏令时发生时是6个小时。

要获取我正在使用的开始时间:

代码语言:javascript
复制
$timestart = date("g:iA",strtotime(substr($event['DTSTART'], 9, -3)));
//$event['DTSTART'] feeds me back the date in ICS format: 20100406T200000Z

那么有什么建议如何处理时区和夏令时呢?

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-09 23:28:08

只是不要使用代码中的substr()部分。timezone=utc能够解析yyyymmddThhiissZ格式的字符串,并将Z解释为strtotime。

例如:

代码语言:javascript
复制
$event = array('DTSTART'=>'20100406T200000Z');
$ts = strtotime($event['DTSTART']);

date_default_timezone_set('Europe/Berlin');
echo date(DateTime::RFC1123, $ts), "\n";

date_default_timezone_set('America/New_York');
echo date(DateTime::RFC1123, $ts), "\n";

打印

代码语言:javascript
复制
Tue, 06 Apr 2010 22:00:00 +0200
Tue, 06 Apr 2010 16:00:00 -0400

编辑:或使用DateTime和DateTimezone类

代码语言:javascript
复制
$event = array('DTSTART'=>'20100406T200000Z');
$dt = new DateTime($event['DTSTART']);

$dt->setTimeZone( new DateTimezone('Europe/Berlin') );
echo $dt->format(DateTime::RFC1123), "\n";

$dt->setTimeZone( new DateTimezone('America/New_York') );
echo $dt->format(DateTime::RFC1123), "\n";

(输出相同)

票数 8
EN

Stack Overflow用户

发布于 2010-04-09 23:32:27

如果您已经设置了时区区域设置,那么您还可以使用date("T"),它将返回当前时区。

代码语言:javascript
复制
echo date("T");

因为我们在夏令时,(在我的时区)它返回: EDT

然后,您可以在IF语句中使用它来调整时区调整。

代码语言:javascript
复制
if (date("T") == 'EDT')
  $adjust = 6;
else
  $adjust = 5;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2608558

复制
相关文章

相似问题

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