【发布时间】:2018-01-12 04:07:09
【问题描述】:
目前我正在尝试检测一个时区是否有 DST,而不是 DST 是否影响当前的时区。
我的代码现在是这样的:
function timezoneDoesDST($tzId) {
$tz = new DateTimeZone($tzId);
return count($tz->getTransitions(time())) > 0;
}
$tz = new DateTimeZone('UTC');
$termin = new DateTime('2017-08-04 12:00:00',$tz);
$mytimezone=array();
foreach(timezone_abbreviations_list() as $abbr => $timezone){
foreach($timezone as $val){
if(isset($val['timezone_id'])){
$found = 0;
$tz2 = new DateTimeZone($val['timezone_id']);
$termin->setTimezone($tz2);
foreach($mytimezone as $mytz)
{
if($mytz['time'] == $termin->format('Y-m-d H:i:s'))
{
$found = 1;
if(timezoneDoesDST($val['timezone_id']))
{
$found = 0;
}
}
}
if($found == 0)
{
$mytimezone[] = array('time' => $termin->format('Y-m-d H:i:s'),'timezone_id' => $val['timezone_id']);
}
}
}
}
foreach($mytimezone as $mytz)
{
echo $mytz['time'].' - '.$mytz['timezone_id'].'<br />';
}
问题是,我不会显示具有不同时间的所有不同时区以及具有 DST 的时区。
但目前它会显示所有时区,如果我删除它:
if(timezoneDoesDST($val['timezone_id']))
{
$found = 0;
}
它只显示不同时间的时区
谢谢
【问题讨论】:
-
不确定我是否理解您要执行的操作。您是否正在尝试重新发明 date("I") 函数? 3v4l.org/WCIV4 和 php.net/manual/en/function.date.php
-
那么想要的结果是什么?您想要使用 DST 的时区列表吗?
-
@Andreas Tht date("l") 如果我是正确的,如果 DST 当前正在影响时间,则函数只会返回。但我想全年生成这个列表,结果相同。所以 date("l") 函数对我不起作用
-
@JanRydrych 我想显示所有使用 DST 的不同时间和时区的时区,而不仅仅是目前。因此,如果有人不改变他的时区,他可以选择一个与他的时间和 DST 相匹配的时区。
-
如果您现在运行它并保存列表,您将获得全年工作列表或其他内容。请记住 date() 将考虑到并非所有国家/地区都在 DST 和非 DST 之间切换相同的日期。