如何知道早上8点在世界何处



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

当访问者来到网站时,它必须知道早上8点在世界上的什么地方。

在某些地方,我们总是问"现在几点了"。

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

提前谢谢。

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

DateTimeZone::listIdentifiers(DateTimeZone::ALL)

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

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

这是一个相当大的代码,您应该自己编写。我给了你出发点和逻辑。我想你可以从那里拿走。

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

你需要有一张地图,将每个时区与地点关联起来,并在这里取时区+2 - 12(因为与上午8点的位置有12小时的偏移)。因此,你需要显示时区为GMT-10的每个国家/城市。

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

如果你想要一个简单的算法,不要考虑分钟,因为如果你采用一个每个时区都是整小时的简单方案,那么只有当世界上的每个时钟都在:00时,你才会有一个区域是上午8点。)

也许这能帮助到别人。我需要在每天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();
    

如果你需要每个国家的精确性,你就需要一个更彻底的方法。

干杯

相关内容

  • 没有找到相关文章

最新更新