2011-10-12 33 views
2

我正在尝试制作一个需要2个用户输入(时区和日期+时间)并将其转换为预定义时区的小脚本。我真的不知道如何处理这个问题。请参阅下面的脚本,了解我想实现的目标。将选定的时间和时区转换为设置的时区

<? 
//I'm so glad I finally made this 
$timezones = array(
'Pacific/Midway' => "(GMT-11:00) Midway Island", 
'US/Samoa'   => "(GMT-11:00) Samoa", 
'US/Hawaii'   => "(GMT-10:00) Hawaii", 
'US/Alaska'   => "(GMT-09:00) Alaska", 
'US/Pacific'  => "(GMT-08:00) Pacific Time (US &amp; Canada)", 
'America/Tijuana' => "(GMT-08:00) Tijuana", 
'US/Arizona'  => "(GMT-07:00) Arizona", 
'US/Mountain'  => "(GMT-07:00) Mountain Time (US &amp; Canada)", 
'America/Chihuahua' => "(GMT-07:00) Chihuahua", 
'America/Mazatlan' => "(GMT-07:00) Mazatlan", 
'America/Mexico_City' => "(GMT-06:00) Mexico City", 
'America/Monterrey' => "(GMT-06:00) Monterrey", 
'Canada/Saskatchewan' => "(GMT-06:00) Saskatchewan", 
'US/Central'  => "(GMT-06:00) Central Time (US &amp; Canada)", 
'US/Eastern'  => "(GMT-05:00) Eastern Time (US &amp; Canada)", 
'US/East-Indiana' => "(GMT-05:00) Indiana (East)", 
'America/Bogota' => "(GMT-05:00) Bogota", 
'America/Lima'  => "(GMT-05:00) Lima", 
'America/Caracas' => "(GMT-04:30) Caracas", 
'Canada/Atlantic' => "(GMT-04:00) Atlantic Time (Canada)", 
'America/La_Paz' => "(GMT-04:00) La Paz", 
'America/Santiago' => "(GMT-04:00) Santiago", 
'Canada/Newfoundland' => "(GMT-03:30) Newfoundland", 
'America/Buenos_Aires' => "(GMT-03:00) Buenos Aires", 
'Greenland'   => "(GMT-03:00) Greenland", 
'Atlantic/Stanley' => "(GMT-02:00) Stanley", 
'Atlantic/Azores' => "(GMT-01:00) Azores", 
'Atlantic/Cape_Verde' => "(GMT-01:00) Cape Verde Is.", 
'Africa/Casablanca' => "(GMT) Casablanca", 
'Europe/Dublin'  => "(GMT) Dublin", 
'Europe/Lisbon'  => "(GMT) Lisbon", 
'Europe/London'  => "(GMT) London", 
'Africa/Monrovia' => "(GMT) Monrovia", 
'Europe/Amsterdam' => "(GMT+01:00) Amsterdam", 
'Europe/Belgrade' => "(GMT+01:00) Belgrade", 
'Europe/Berlin'  => "(GMT+01:00) Berlin", 
'Europe/Bratislava' => "(GMT+01:00) Bratislava", 
'Europe/Brussels' => "(GMT+01:00) Brussels", 
'Europe/Budapest' => "(GMT+01:00) Budapest", 
'Europe/Copenhagen' => "(GMT+01:00) Copenhagen", 
'Europe/Ljubljana' => "(GMT+01:00) Ljubljana", 
'Europe/Madrid'  => "(GMT+01:00) Madrid", 
'Europe/Paris'  => "(GMT+01:00) Paris", 
'Europe/Prague'  => "(GMT+01:00) Prague", 
'Europe/Rome'  => "(GMT+01:00) Rome", 
'Europe/Sarajevo' => "(GMT+01:00) Sarajevo", 
'Europe/Skopje'  => "(GMT+01:00) Skopje", 
'Europe/Stockholm' => "(GMT+01:00) Stockholm", 
'Europe/Vienna'  => "(GMT+01:00) Vienna", 
'Europe/Warsaw'  => "(GMT+01:00) Warsaw", 
'Europe/Zagreb'  => "(GMT+01:00) Zagreb", 
'Europe/Athens'  => "(GMT+02:00) Athens", 
'Europe/Bucharest' => "(GMT+02:00) Bucharest", 
'Africa/Cairo'  => "(GMT+02:00) Cairo", 
'Africa/Harare'  => "(GMT+02:00) Harare", 
'Europe/Helsinki' => "(GMT+02:00) Helsinki", 
'Europe/Istanbul' => "(GMT+02:00) Istanbul", 
'Asia/Jerusalem' => "(GMT+02:00) Jerusalem", 
'Europe/Kiev'  => "(GMT+02:00) Kyiv", 
'Europe/Minsk'  => "(GMT+02:00) Minsk", 
'Europe/Riga'  => "(GMT+02:00) Riga", 
'Europe/Sofia'  => "(GMT+02:00) Sofia", 
'Europe/Tallinn' => "(GMT+02:00) Tallinn", 
'Europe/Vilnius' => "(GMT+02:00) Vilnius", 
'Asia/Baghdad'  => "(GMT+03:00) Baghdad", 
'Asia/Kuwait'  => "(GMT+03:00) Kuwait", 
'Europe/Moscow'  => "(GMT+03:00) Moscow", 
'Africa/Nairobi' => "(GMT+03:00) Nairobi", 
'Asia/Riyadh'  => "(GMT+03:00) Riyadh", 
'Europe/Volgograd' => "(GMT+03:00) Volgograd", 
'Asia/Tehran'  => "(GMT+03:30) Tehran", 
'Asia/Baku'   => "(GMT+04:00) Baku", 
'Asia/Muscat'  => "(GMT+04:00) Muscat", 
'Asia/Tbilisi'  => "(GMT+04:00) Tbilisi", 
'Asia/Yerevan'  => "(GMT+04:00) Yerevan", 
'Asia/Kabul'  => "(GMT+04:30) Kabul", 
'Asia/Yekaterinburg' => "(GMT+05:00) Ekaterinburg", 
'Asia/Karachi'  => "(GMT+05:00) Karachi", 
'Asia/Tashkent'  => "(GMT+05:00) Tashkent", 
'Asia/Kolkata'  => "(GMT+05:30) Kolkata", 
'Asia/Kathmandu' => "(GMT+05:45) Kathmandu", 
'Asia/Almaty'  => "(GMT+06:00) Almaty", 
'Asia/Dhaka'  => "(GMT+06:00) Dhaka", 
'Asia/Novosibirsk' => "(GMT+06:00) Novosibirsk", 
'Asia/Bangkok'  => "(GMT+07:00) Bangkok", 
'Asia/Jakarta'  => "(GMT+07:00) Jakarta", 
'Asia/Krasnoyarsk' => "(GMT+07:00) Krasnoyarsk", 
'Asia/Chongqing' => "(GMT+08:00) Chongqing", 
'Asia/Hong_Kong' => "(GMT+08:00) Hong Kong", 
'Asia/Irkutsk'  => "(GMT+08:00) Irkutsk", 
'Asia/Kuala_Lumpur' => "(GMT+08:00) Kuala Lumpur", 
'Australia/Perth' => "(GMT+08:00) Perth", 
'Asia/Singapore' => "(GMT+08:00) Singapore", 
'Asia/Taipei'  => "(GMT+08:00) Taipei", 
'Asia/Ulaanbaatar' => "(GMT+08:00) Ulaan Bataar", 
'Asia/Urumqi'  => "(GMT+08:00) Urumqi", 
'Asia/Seoul'  => "(GMT+09:00) Seoul", 
'Asia/Tokyo'  => "(GMT+09:00) Tokyo", 
'Asia/Yakutsk'  => "(GMT+09:00) Yakutsk", 
'Australia/Adelaide' => "(GMT+09:30) Adelaide", 
'Australia/Darwin' => "(GMT+09:30) Darwin", 
'Australia/Brisbane' => "(GMT+10:00) Brisbane", 
'Australia/Canberra' => "(GMT+10:00) Canberra", 
'Pacific/Guam'  => "(GMT+10:00) Guam", 
'Australia/Hobart' => "(GMT+10:00) Hobart", 
'Australia/Melbourne' => "(GMT+10:00) Melbourne", 
'Pacific/Port_Moresby' => "(GMT+10:00) Port Moresby", 
'Australia/Sydney' => "(GMT+10:00) Sydney", 
'Asia/Vladivostok' => "(GMT+10:00) Vladivostok", 
'Asia/Magadan'  => "(GMT+11:00) Magadan", 
'Pacific/Auckland' => "(GMT+12:00) Auckland", 
'Pacific/Fiji'  => "(GMT+12:00) Fiji", 
'Asia/Kamchatka' => "(GMT+12:00) Kamchatka", 
); 
//So happy I finished making that 
if(!$_POST){ 
?> 
<form method="post"> 
<input type="text" id="datepicker" name="date" /> 
<select name="zone"> 
<? 

foreach($timezones as $key => $value){ 
echo "<option name=\"zone\" value=\"$key\">$value</option>"; 
} 
?> 
</select> 
<input type="submit" value="Convert" /> 
</form> 
<? 
} 
if($_POST){ 
$date = $_POST['date']; //comes in format "m/d/Y h:i" 
$zone = $_POST['zone']; //is in php format e.g. "Pacific/Auckland" 

echo "You selected ".$date." in the timezone ".$zone."<br>"; 
echo "The time in New Zealand is ".$result." which is GMT+12"; 
} 
?> 

编辑:NEW CODE

<? 
//I'm so glad I finally made this 
$timezones = array(
'Pacific/Midway' => "(GMT-11:00) Midway Island", 
'US/Samoa'   => "(GMT-11:00) Samoa", 
'US/Hawaii'   => "(GMT-10:00) Hawaii", 
'US/Alaska'   => "(GMT-09:00) Alaska", 
'US/Pacific'  => "(GMT-08:00) Pacific Time (US &amp; Canada)", 
'America/Tijuana' => "(GMT-08:00) Tijuana", 
'US/Arizona'  => "(GMT-07:00) Arizona", 
'US/Mountain'  => "(GMT-07:00) Mountain Time (US &amp; Canada)", 
'America/Chihuahua' => "(GMT-07:00) Chihuahua", 
'America/Mazatlan' => "(GMT-07:00) Mazatlan", 
'America/Mexico_City' => "(GMT-06:00) Mexico City", 
'America/Monterrey' => "(GMT-06:00) Monterrey", 
'Canada/Saskatchewan' => "(GMT-06:00) Saskatchewan", 
'US/Central'  => "(GMT-06:00) Central Time (US &amp; Canada)", 
'US/Eastern'  => "(GMT-05:00) Eastern Time (US &amp; Canada)", 
'US/East-Indiana' => "(GMT-05:00) Indiana (East)", 
'America/Bogota' => "(GMT-05:00) Bogota", 
'America/Lima'  => "(GMT-05:00) Lima", 
'America/Caracas' => "(GMT-04:30) Caracas", 
'Canada/Atlantic' => "(GMT-04:00) Atlantic Time (Canada)", 
'America/La_Paz' => "(GMT-04:00) La Paz", 
'America/Santiago' => "(GMT-04:00) Santiago", 
'Canada/Newfoundland' => "(GMT-03:30) Newfoundland", 
'America/Buenos_Aires' => "(GMT-03:00) Buenos Aires", 
'Greenland'   => "(GMT-03:00) Greenland", 
'Atlantic/Stanley' => "(GMT-02:00) Stanley", 
'Atlantic/Azores' => "(GMT-01:00) Azores", 
'Atlantic/Cape_Verde' => "(GMT-01:00) Cape Verde Is.", 
'Africa/Casablanca' => "(GMT) Casablanca", 
'Europe/Dublin'  => "(GMT) Dublin", 
'Europe/Lisbon'  => "(GMT) Lisbon", 
'Europe/London'  => "(GMT) London", 
'Africa/Monrovia' => "(GMT) Monrovia", 
'Europe/Amsterdam' => "(GMT+01:00) Amsterdam", 
'Europe/Belgrade' => "(GMT+01:00) Belgrade", 
'Europe/Berlin'  => "(GMT+01:00) Berlin", 
'Europe/Bratislava' => "(GMT+01:00) Bratislava", 
'Europe/Brussels' => "(GMT+01:00) Brussels", 
'Europe/Budapest' => "(GMT+01:00) Budapest", 
'Europe/Copenhagen' => "(GMT+01:00) Copenhagen", 
'Europe/Ljubljana' => "(GMT+01:00) Ljubljana", 
'Europe/Madrid'  => "(GMT+01:00) Madrid", 
'Europe/Paris'  => "(GMT+01:00) Paris", 
'Europe/Prague'  => "(GMT+01:00) Prague", 
'Europe/Rome'  => "(GMT+01:00) Rome", 
'Europe/Sarajevo' => "(GMT+01:00) Sarajevo", 
'Europe/Skopje'  => "(GMT+01:00) Skopje", 
'Europe/Stockholm' => "(GMT+01:00) Stockholm", 
'Europe/Vienna'  => "(GMT+01:00) Vienna", 
'Europe/Warsaw'  => "(GMT+01:00) Warsaw", 
'Europe/Zagreb'  => "(GMT+01:00) Zagreb", 
'Europe/Athens'  => "(GMT+02:00) Athens", 
'Europe/Bucharest' => "(GMT+02:00) Bucharest", 
'Africa/Cairo'  => "(GMT+02:00) Cairo", 
'Africa/Harare'  => "(GMT+02:00) Harare", 
'Europe/Helsinki' => "(GMT+02:00) Helsinki", 
'Europe/Istanbul' => "(GMT+02:00) Istanbul", 
'Asia/Jerusalem' => "(GMT+02:00) Jerusalem", 
'Europe/Kiev'  => "(GMT+02:00) Kyiv", 
'Europe/Minsk'  => "(GMT+02:00) Minsk", 
'Europe/Riga'  => "(GMT+02:00) Riga", 
'Europe/Sofia'  => "(GMT+02:00) Sofia", 
'Europe/Tallinn' => "(GMT+02:00) Tallinn", 
'Europe/Vilnius' => "(GMT+02:00) Vilnius", 
'Asia/Baghdad'  => "(GMT+03:00) Baghdad", 
'Asia/Kuwait'  => "(GMT+03:00) Kuwait", 
'Europe/Moscow'  => "(GMT+03:00) Moscow", 
'Africa/Nairobi' => "(GMT+03:00) Nairobi", 
'Asia/Riyadh'  => "(GMT+03:00) Riyadh", 
'Europe/Volgograd' => "(GMT+03:00) Volgograd", 
'Asia/Tehran'  => "(GMT+03:30) Tehran", 
'Asia/Baku'   => "(GMT+04:00) Baku", 
'Asia/Muscat'  => "(GMT+04:00) Muscat", 
'Asia/Tbilisi'  => "(GMT+04:00) Tbilisi", 
'Asia/Yerevan'  => "(GMT+04:00) Yerevan", 
'Asia/Kabul'  => "(GMT+04:30) Kabul", 
'Asia/Yekaterinburg' => "(GMT+05:00) Ekaterinburg", 
'Asia/Karachi'  => "(GMT+05:00) Karachi", 
'Asia/Tashkent'  => "(GMT+05:00) Tashkent", 
'Asia/Kolkata'  => "(GMT+05:30) Kolkata", 
'Asia/Kathmandu' => "(GMT+05:45) Kathmandu", 
'Asia/Almaty'  => "(GMT+06:00) Almaty", 
'Asia/Dhaka'  => "(GMT+06:00) Dhaka", 
'Asia/Novosibirsk' => "(GMT+06:00) Novosibirsk", 
'Asia/Bangkok'  => "(GMT+07:00) Bangkok", 
'Asia/Jakarta'  => "(GMT+07:00) Jakarta", 
'Asia/Krasnoyarsk' => "(GMT+07:00) Krasnoyarsk", 
'Asia/Chongqing' => "(GMT+08:00) Chongqing", 
'Asia/Hong_Kong' => "(GMT+08:00) Hong Kong", 
'Asia/Irkutsk'  => "(GMT+08:00) Irkutsk", 
'Asia/Kuala_Lumpur' => "(GMT+08:00) Kuala Lumpur", 
'Australia/Perth' => "(GMT+08:00) Perth", 
'Asia/Singapore' => "(GMT+08:00) Singapore", 
'Asia/Taipei'  => "(GMT+08:00) Taipei", 
'Asia/Ulaanbaatar' => "(GMT+08:00) Ulaan Bataar", 
'Asia/Urumqi'  => "(GMT+08:00) Urumqi", 
'Asia/Seoul'  => "(GMT+09:00) Seoul", 
'Asia/Tokyo'  => "(GMT+09:00) Tokyo", 
'Asia/Yakutsk'  => "(GMT+09:00) Yakutsk", 
'Australia/Adelaide' => "(GMT+09:30) Adelaide", 
'Australia/Darwin' => "(GMT+09:30) Darwin", 
'Australia/Brisbane' => "(GMT+10:00) Brisbane", 
'Australia/Canberra' => "(GMT+10:00) Canberra", 
'Pacific/Guam'  => "(GMT+10:00) Guam", 
'Australia/Hobart' => "(GMT+10:00) Hobart", 
'Australia/Melbourne' => "(GMT+10:00) Melbourne", 
'Pacific/Port_Moresby' => "(GMT+10:00) Port Moresby", 
'Australia/Sydney' => "(GMT+10:00) Sydney", 
'Asia/Vladivostok' => "(GMT+10:00) Vladivostok", 
'Asia/Magadan'  => "(GMT+11:00) Magadan", 
'Pacific/Auckland' => "(GMT+12:00) Auckland", 
'Pacific/Fiji'  => "(GMT+12:00) Fiji", 
'Asia/Kamchatka' => "(GMT+12:00) Kamchatka", 
); 
//So happy I finished making that 
if(!$_POST){ 
?> 
<form method="post"> 
<input type="text" id="datepicker" name="date" /> 
<select name="zone"> 
<? 

foreach($timezones as $key => $value){ 
echo "<option name=\"zone\" value=\"$key\">$value</option>"; 
} 
?> 
</select> 
<input type="submit" value="Convert" /> 
</form> 
<? 
} 
if($_POST){ 
$date = $_POST['date']; //comes in format "m/d/Y h:i" 
$zone = $_POST['zone']; //is in php format e.g. "Pacific/Auckland" 



try { 
$date = new DateTime($_POST['date'], new DateTimeZone($_POST['zone'])); 
$date->setTimezone(new DateTimeZone('Pacific/Auckland')); 
$result = $date->format('m/d/Y H:i'); 
} catch (Exception $e) { 
echo $e->getMessage(); 
} 
echo $result; 




} 
?> 

回答

2
try { 
    $date = new DateTime($_POST['date'], new DateTimeZone($_POST['zone'])); 
    $date->setTimezone(new DateTimeZone('Pacific/Auckland')); 
    $result = $date->format('m/d/Y h:i'); 
} catch (Exception $e) { 
    echo $e->getMessage(); 
} 
+0

这似乎是工作居多。然而,它似乎增加了应该减去的时间,例如,我输入一个下午6点的时间,并从我的下拉列表中选择悉尼。在这种情况下,结果应该只需要2个小时(悉尼是+10,而新西兰是+12)。但结果是晚上8点。 OP编辑中的新代码 –

+0

@JoshUndefined新西兰的悉尼晚上6点是不是应该是晚上8点? – xdazz

+0

我是个白痴!对不起接近一天结束,我有点糊涂。它按预期工作。标记为正确。希望这得到很好的索引,因为这是一个惊人的解决方案:)再次感谢 –

相关问题