我对网站有一点想法,要解决的主要问题是:
当访问者来到该站点时,它必须知道早上 8 点是世界上的哪个地方。
我们总是在某个地方询问“现在几点”。
以编程方式(例如 PHP)。我们如何作为反题?
提前致谢。
您需要从时区列表开始,您可以从中获取:
DateTimeZone::listIdentifiers(DateTimeZone::ALL)
然后遍历列表,获取每个区域的当前时间。
如果时间在您要查找的范围内,则将该区域添加到要返回的值列表中。这将是一个范围——你不能只说“8:00 在哪里”——因为击中鼻子上的那个标记会非常困难。您可以改为说“它在哪里大于或等于 8:00 且小于 9:00”。
这是一段相当大的代码,您应该自己编写。我给了你起点和逻辑。我想你可以从那里拿走它。
也许这可以帮助某人。我需要在每天 17:00-19:00 之间发送一封电子邮件,具体取决于用户所在的国家/地区,这是通过注册表获得的。我最终只为每个用户提供了一个由两个字母组成的国家/地区代码。(我的客户对所有美国用户暂时都拥有相同的时区感到满意。)环顾四周后,我得到了以下结果:
一个以 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
));
一个返回国家数组(如果有的话)的函数,它现在在 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();
如果您需要每个国家/地区的精确度,您将需要更彻底的方法。
干杯
您可以使用当地时间,例如在法国这里是 20:30。时区当前是夏季的 UTC 或 GMT+2。
您需要一张将每个时区与位置相关联的地图,并在+2 - 12
此处获取时区(因为上午 8 点的位置有 12 小时的偏移量)。因此,您需要显示时区为 GMT-10 的每个国家/城市。
有一些情况需要解决,例如澳大利亚有半个时区(即使是四分之一!如果我记得的话,UTC +8:45),但想法就在这里。
如果你想要一个简单的算法,不要考虑分钟,因为如果你采用一个简单的方案,每个时区都是全时,你将有一个区域,只有当每个时钟在世界在:00 :-)