我对网站有一点想法,需要解决的主要问题是:
当访问者来到网站时,它必须知道早上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之间发送一封电子邮件,这取决于用户的国家,这是通过注册表格获得的。最终,我只为每个用户提供了两个字母的国家代码。(我的客户暂时同意所有美国用户都有相同的时区。)环顾四周后,我得到了以下结果:
-
一个以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();
如果你需要每个国家的精确性,你就需要一个更彻底的方法。
干杯