如何知道世界上哪个是早上8点

时间:2013-08-18 18:28:44

标签: php time timezone

我对网站有一点想法,要解决的主要问题是:

当访问者访问该网站时,必须知道世界上哪个地方是早上8点。

我们总是在某个地方询问“现在几点了”。

以编程方式(例如PHP)。我们如何作为相反的问题?

提前感谢。

3 个答案:

答案 0 :(得分:2)

您需要从时区列表开始,您可以从中获取:

DateTimeZone::listIdentifiers(DateTimeZone::ALL)

然后遍历列表,获取每个区域的当前时间。

如果时间在您要查找的范围内,请将区域添加到要返回的值列表中。这将是一个范围 - 你不能只说“8:00在哪里” - 因为在鼻子上击中那个标记会非常困难。您可以改为说“它大于或等于8:00且小于9:00”。

这是你应该自己写的相当多的代码。我给了你起点和逻辑。我想你可以从那里拿走它。

答案 1 :(得分:0)

您可以选择当地时间,例如法国的20:30。夏季时区目前是UTC或GMT + 2.

你需要有一个地图,它将每个时区与位置相关联,并在此处获取时区+2 - 12(因为它的偏移量为12小时,其位置为8 a.m)。因此,您需要显示时区为GMT-10的每个国家/地区。

有一些情况需要解决,例如澳大利亚有半个时区(甚至是四分之一!如果我记得的话,UTC +8:45),但这个想法就在这里。

如果你想要一个简单的算法,不要花费几分钟的时间考虑,因为如果你采用一个简单的方案,每个时区都是全时,你就会有一个区域,它是8a。只有当世界上每个时钟都在00: - )时才会发出声音。

答案 2 :(得分:0)

也许这可以帮助某人。我需要每天17:00-19:00之间发送电子邮件,具体取决于用户的国家/地区,这是通过注册表单获得的。我最终只为每个用户提供了两个字母的国家代码。 (我的客户对所有具有相同时区的美国用户都很好。)经过一番环顾,我最终得到了以下内容:

  1. 一个数据,其中UTC偏移量为关键字,每个字母数组包含两个字母的国家/地区代码。

    $timezones_countries = array(
    '0' => array(
        'BF', // Burkina Faso
        'CI', // Côte d'Ivoire
        'DK', // Denmark,
        'ES', // Spain
        'GM', // Gambia
        'GH', // Ghana
        'GN', // Guinea
        'GW', // Guinea-Bissau
        'IS', // Iceland
        'IE', // Ireland
        'LR', // Liberia
        'MA', // Morocco
        'ML', // Mali
        'MR', // Mauritania
        'PT', // Portugal
        'SN', // Senegal
        'SL', // Sierra Leone
        'ST', // São Tomé and Príncipe
        'TG', // Togo
        'UK'  // United Kingdom
    ),
    '1' => array(
        'AD', // Andorra
        'AL', // Albania
        'AO', // Angola
        'AT', // Austria
        'BA', // Bosnia and Herzegovina
        'BE', // Belgium
        'BJ', // Benin
        'CF', // Central African Republic
        'CG', // Congo
        'CH', // Switzerland
        'CM', // Cameroon
        'CZ', // Czech Republic
        'DE', // Deutschland
        'DZ', // Algeria
        'FR', // France
        'GA', // Gabon
        'GQ', // Equatorial Guinea
        'HR', // Croatia
        'HU', // Hungary
        'IT', // Italy
        'LI', // Lichtenstein
        'LU', // Lucembourg
        'MC', // Monaco
        'ME', // Montenegro
        'MK', // Macedonia
        'MT', // Malta
        'NA', // Namibia
        'NE', // Niger
        'NG', // Nigeria
        'NO', // Norway
        'PL', // Poland
        'SE', // Sweden
        'SI', // Slovenia
        'SK', // Slovakia
        'SM', // San Marino
        'RS', // Serbia
        'TD', // Chad
        'TN', // Tunisia
        'VA'  // Vatican City
    ),
    '2' => array(
        'BG', // Bulgaria
        'BI', // Burundi
        'BW', // Botswana
        'CY', // Cyprus
        'EE', // Estonia
        'EG', // Egypt
        'GR', // Greece
        'FI', // Finland
        'IL', // Israel
        'JO', // Jordan
        'LB', // Lebanon
        'LS', // Lesotho
        'LT', // Lithuania
        'LV', // Latvia
        'LY', // Lybia
        'MD', // Moldova
        'MW', // Malawi
        'MZ', // Mozambique
        'RO', // Romania
        'RW', // Rwanda
        'SY', // Syria
        'SZ', // Swaziland
        'TR', // Turkey
        'UA', // Ukraine
        'ZA', // South Africa
        'ZM', // Zambia
        'ZW', // Zimbabwe
    ),
    '3' => array(
        'BH', // Bahrain
        'BY', // Belarus
        'DJ', // Djibouti
        'ER', // Eritrea
        'ET', // Ethiopia
        'IQ', // Iraq
        'KE', // Kenya
        'KW', // Kuwait
        'KM', // Comoros
        'MG', // Madagascar
        'QA', // Qatar
        'SA', // Saudi Arabia
        'SD', // Sudan
        'SO', // Somalia
        'SS', // South Sudan
        'TZ', // Tanzania
        'UG', // Uganda
        'YE'  // Yemen
    ),
    '4' => array(
        'AE', // United Arab Emirates
        'AM', // Armenia
        'AZ', // Azerbaijan
        'GE', // Georgia
        'IR', // Iran
        'MU', // Mauritius
        'OM', // Oman
        'RU', // Russia
        'SC', // Seychelles
    ),
    '5' => array(
        'AF', // Afghanistan
        'KZ', // Kazakhstan
        'MV', // Maldives
        'PK', // Pakistan
        'TJ', // Tajikistan
        'TM', // Turkmenistan
        'UZ'  // Uzbekistan
    ),
    '6' => array(
        'BD', // Bangladesh
        'BT', // Bhutan
        'IN', // India
        'LK', // Sri Lanka
        'KG', // Kyrgyzstan
        'NP', // Nepal
    ),
    '7' => array(
        'ID', // Indonesia
        'KH', // Cambodia
        'LA', // Laos
        'MM', // Myanmar
        'TH', // Thailand
        'VN'  // Vietnam
    ),
    '8' => array(
        'BN', // Brunei
        'CN', // China
        'MN', // Mongolia
        'MY', // Malaysia
        'PH', // Philippines
        'SG', // Singapore
        'TW'  // Taiwan
    ),
    '9' => array(
        'JP', // Japan
        'KP', // North Korea
        'KR', // South Korea
        'PW', // Palau
        'TP'  // East Timor
    ),
    '10' => array(
        'AU', // Australia
        'FM', // Federated States of Micronesia
        'MP', // Northern Mariana Islands
        'PG'  // Papua New Guinea
    ),
    '11' => array(
        'SB', // Solomon Islands
        'VU'  // Vanuatu
    ),
    '12' => array(
        'FJ', // Fiji
        'KI', // Kiribati
        'MH', // Marshall Islands
        'NF', // Norfolk Island
        'NR', // Nauru
        'NZ', // New Zealand
        'TV'  // Tuvalu
    ),
    '13' => array(
        'TO', // Tonga
        'WS'  // Samoa
    
    ),
    '-12' => array(),
    '-11' => array(
        'AS', // American Samoa
        'NU'  // Niue
    ),
    '-10' => array(
        'PF'  // French Polynesia
    ),
    '-9' => array(),
    '-8' => array(),
    '-7' => array(),
    '-6' => array(
        'BZ', // Belize
        'CR', // Costa Rica
        'GT', // Guatemala
        'HN', // Honduras
        'MX', // Mexico
        'NI', // Nicaragua
        'SV'  // El Salvador
    ),
    '-5' => array(
        'BS', // Bahamas
        'CA', // Canada
        'CO', // Colombia
        'CU', // Cuba
        'EC', // Ecuador
        'HT', // Haiti
        'JM', // Jamaica
        'KY', // Cayman Islands
        'PA', // Panama
        'PE', // Peru
        'TC', // Turks and Caicos Islands
        'US'  // United States
    ),
    '-4' => array(
        'AG', // Antigua and Barbuda
        'AW', // Aruba
        'BB', // Barbados
        'BM', // Bermuda
        'BO', // Bolivia
        'CL', // Chile
        'DM', // Dominica
        'DO', // Dominican Republic
        'GD', // Grenada
        'GP', // Guadeloupe
        'GY', // Guyana
        'KN', // Saint Kitts and Nevis
        'LC', // Saint Lucia
        'MQ', // Martinique
        'MS', // Montserrat
        'PR', // Puerto Rico
        'PY', // Paraguay
        'TT', // Trinidad and Tobago
        'VC', // Saint Vincent and the Grenadines
        'VE', // Venezuela
        'VG', // British Virgin Islands
        'VI'  // US Virgin Islands
    ),
    
        '-3' => array(
        'AR', // Argentina
        'BR', // Brazil
        'FK', // Falkland Islands
        'GL', // Greenland
        'GF', // French Guiana
        'SR', // Suriname
        'UY'  // Uruguay
    ),
    '-2' => array(
        'GS'  // South Georgia and the South Sandwich Islands
    ),
    '-1' => array(
        'CV'  // Cape Verde
    ));
    
  2. 一个函数,它返回现在17:00到19:00之间的国家/地区数组(如果有)。服务器时间是UTC。我确信它可以提高效率(建议,任何人?:))。

    function getTimezoneCountryCodes() {
        $offset = -12;
        $server_time = time();
        $countries = null;
        //echo 'UTC: '.date('Y-m-d H:i:s',$server_time)."\n";
        while($offset < 12) {
            $delta_time = $offset * 3600;
            $trigger_time = $server_time + $delta_time;
            $hour = date('H', $trigger_time);
            if($hour == 17) {
                global $timezones_countries;
                $result = array(
                    'time'      => $trigger_time,
                    'countries' => $timezones_countries[strval($offset)]
                );
                return $result;
            }
            $offset++;
        }
    }
    $timezone = getTimezoneCountryCodes();
    
  3. 如果您需要每个国家/地区的精确度,您需要采取更彻底的方法。

    干杯