【问题标题】:how to show countries who has same time in one list如何在一个列表中显示具有相同时间的国家
【发布时间】:2017-06-16 12:52:35
【问题描述】:

我有这个代码:

   public function parse_timezones_list($timezones = '') {
    global $lang, $core;
    if(!is_array($timezones) || is_empty($timezones)) {
        $timezones = array('UTC', 'Africa/Casablanca', 'Africa/Dakar', 'Africa/Abidjan', 'Europe/Paris', 'Africa/Lagos', 'Africa/Algiers', 'Africa/Tunis', 'Africa/Cairo', 'Asia/Beirut', 'Asia/Amman', 'Africa/Nairobi', 'Asia/Riyadh', 'Asia/Tehran', 'Asia/Dubai', 'Asia/Hong_Kong');
    }
    $gmttime = gmmktime(gmdate('H'), gmdate('i'), gmdate('s'), gmdate('n'), gmdate('d'), gmdate('Y'));
    $timezones_list.='<ul class="list-group">';
    foreach($timezones as $timezone) {
        $timezone_obj = new DateTimeZone($timezone);
        $time_obj = new DateTime('now', $timezone_obj);
        $timezone_city = str_replace('_', ' ', explode('/', $timezone));
        if(empty($timezone_city[1])) {
            $timezone_city[1] = $timezone_city[0];
        }
        $timezones_list .= '<li class="list-group-item">'.$lang->sprint($lang->timecity, date('H:i', $gmttime + $timezone_obj->getOffset($time_obj)), ucwords($timezone_city[1])).'</li>';
    }
    $timezones_list.='</ul>';
    return $timezones_list;
}

所以结果是这样的:14:45 UTC time 14:45 Casablanca time 14:45 Dakar time 14:45 Abidjan time 16:45 Paris time 15:45 Lagos time 15:45 Algiers time 15:45 Tunis time 16:45 Cairo time

我想表明,对于在同一行中具有相同时间的每个国家/地区,例如,我想这样:14:45 Casablanca time,Dakar time,Abidjan time

谢谢你的帮助

【问题讨论】:

  • 同一时间是什么时候?马上?顺便说一句,最好在标签中列出您的语言 - 这将比“数组”、“函数”或“oop”更相关。
  • 是的,我的意思是要显示每个国家/地区的时间,我不需要显示每个国家/地区有相同的时间@JonSkeet
  • 使用数组对它们进行分组...?! $timezones['14:45'][] = $timezone(当然要动态替换“14:45”)。
  • 你能给我写代码吗谢谢@deceze
  • 请注意,如果适合您的用例:如果您要求用户选择他们的时区(例如,作为首选项设置),则不会进行分组。 现在时区可能是同一时间,但由于 DST,这会有所不同。

标签: php arrays oop datetime


【解决方案1】:

不是 100% 我理解这个问题,但这段代码会将位置分组到各自的时区:

$timezones = array('Africa/Casablanca', 'Africa/Dakar', 'Africa/Abidjan', 'Europe/Paris', 'Africa/Lagos', 'Africa/Algiers', 'Africa/Tunis', 'Africa/Cairo', 'Asia/Beirut', 'Asia/Amman', 'Africa/Nairobi', 'Asia/Riyadh', 'Asia/Tehran', 'Asia/Dubai', 'Asia/Hong_Kong');
$locations = array();
foreach ($timezones as $timezone) {
    $dateTime = new DateTime(); 
    $dateTime->setTimeZone(new DateTimeZone($timezone)); 
    $locations[$dateTime->format('T')][] = $timezone;
}

它从 $locations 中创建一个数组,其中包含时区的键和区域的值。输出类似于:

Array
(
    [WET] => Array
        (
            [0] => Africa/Casablanca
        )

    [GMT] => Array
        (
            [0] => Africa/Dakar
            [1] => Africa/Abidjan
        )

    [CEST] => Array
        (
            [0] => Europe/Paris
        )

    [WAT] => Array
        (
            [0] => Africa/Lagos
        )
)

【讨论】:

    猜你喜欢
    • 2020-05-22
    • 2014-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-29
    • 1970-01-01
    相关资源
    最近更新 更多