我在下拉列表中有以下给定的时间间隔选项(那些是字符串)
<select name="CSSAtapsClient[client_time_window][0]" id="client_time_window_0">
<option value="5702">7am - 10am</option>
<option value="5703">10am - 1pm</option>
<option value="5704">12pm - 3pm</option>
<option value="5705">3pm - 6pm</option>
<option value="5706">6pm - 9pm</option>
<option value="5707">7pm - 10pm</option>
<option value="5708">9pm - 12am</option>
<option value="5709">12am - 7am</option>
</select>
我需要将这些间隔转换为特定的GMT时区。例如,假设它在GMT +8中,我需要将其转换为GMT +10,并且可以通过增加2小时来完成。
所以,如果给定的时间间隔为早上7点 - 上午10点(GMT +8),则应该上午9点 - 下午12点(GMT +10)
转换此类时间间隔的最佳方法是什么?我在这里看到的问题是它的字符串(时间间隔)。
感谢早期回复。
编辑1
我只转换到澳大利亚各州,因此在转换时没有机会获得一天的差异。请查看此链接http://www.timebie.com/tz/australiatimezone.php
答案 0 :(得分:2)
尝试此功能。 (根据您的编辑,我的gmt_to_gmt函数的$ to_gmt var默认值为“GMT +10”)
<?php
function is_am_pm($str){
if(strpos($str, "am") !== false || strpos($str, "AM") !== false) return "am";
if(strpos($str, "pm") !== false || strpos($str, "PM") !== false) return "pm";
}
function get_only_int($str){
if(strpos($str, ".") !== false){
if(preg_match_all("/\s(.*?)\.(.*?)$/", $str, $matches))
return trim(trim($matches[0][0]),"+");
}else{
return (int) preg_replace('/\D/', '', $str);
}
}
function gmt_to_gmt($str,$from_gmt,$to_gmt = "GMT +10"){
if(!is_numeric($from_gmt)) $from_gmt = get_only_int($from_gmt);
if(!is_numeric($to_gmt)) $to_gmt = get_only_int($to_gmt);
$temp_time = explode("-",$str);
$begin_time_s = is_am_pm($temp_time[0]);
$begin_time = get_only_int(trim($temp_time[0]));
$end_time_s = is_am_pm($temp_time[1]);
$end_time = get_only_int(trim($temp_time[1]));
$time_diff = $to_gmt - $from_gmt;
$begin_time = $begin_time + $time_diff;
$end_time = $end_time + $time_diff;
if($begin_time > 11){
if($begin_time_s == "am"){
$begin_time >= 12 && $begin_time < 13 ? $begin_time : $begin_time -= 12;
$begin_time .= "pm";
}else{
$begin_time >= 12 && $begin_time < 13 ? $begin_time : $begin_time -= 12;
$begin_time .= "am";
}
}else{
$begin_time .= $begin_time_s;
}
if($end_time > 11){
if($end_time_s == "am"){
$end_time >= 12 && $end_time < 13 ? $end_time : $end_time -= 12;
$end_time .= "pm";
}else{
$end_time >= 12 && $end_time < 13 ? $end_time : $end_time -= 12;
$end_time .= "am";
}
}else{
$end_time .= $end_time_s;
}
return $begin_time . " - " . $end_time;
}
echo gmt_to_gmt("11am - 10pm", "GMT +0" , "GMT +2.5");
?>
度过愉快的一天
答案 1 :(得分:1)
我完成的答案。
<?php
function is_am_pm($str) {
if (strpos($str, "am") !== false || strpos($str, "AM") !== false)
return "am";
if (strpos($str, "pm") !== false || strpos($str, "PM") !== false)
return "pm";
}
function get_only_int($str) {
if (strpos($str, ".") !== false) {
if (preg_match_all("/\s(.*?)\.(.*?)$/", $str, $matches))
return trim(trim($matches[0][0]), "+");
}else {
return (int) preg_replace('/\D/', '', $str);
}
}
function gmt_to_gmt($str, $from_gmt, $to_gmt = "GMT +10") {
if (!is_numeric($from_gmt))
$from_gmt = get_only_int($from_gmt);
if (!is_numeric($to_gmt))
$to_gmt = get_only_int($to_gmt);
$temp_time = explode("-", $str);
$begin_time_s = is_am_pm($temp_time[0]);
$begin_time = get_only_int(trim($temp_time[0]));
$end_time_s = is_am_pm($temp_time[1]);
$end_time = get_only_int(trim($temp_time[1]));
$time_diff = $to_gmt - $from_gmt;
$begin_time = $begin_time + $time_diff;
$end_time = $end_time + $time_diff;
if ($begin_time > 11.59) {
if ($begin_time_s == "am") {
$begin_time >= 12 && $begin_time < 13 ? $begin_time : $begin_time -= 12; // 13.3 - 12
$begin_time .= "pm";
} else {
$begin_time >= 12 && $begin_time < 13 ? $begin_time : $begin_time -= 12;
$begin_time .= "am";
}
} else {
$begin_time .= $begin_time_s;
}
if ($end_time > 11.59) { // 11.3
if ($end_time_s == "am") {
$end_time >= 12 && $end_time < 13 ? $end_time : $end_time -= 12;
$end_time .= "pm";
} else {
$end_time >= 12 && $end_time < 13 ? $end_time : $end_time -= 12;
$end_time .= "am";
}
} else {
$end_time .= $end_time_s;
}
return format_string($begin_time)." - ".format_string($end_time);
}
function format_string($str) {
$temp_am_pm = is_am_pm($str);
$str = (float) preg_replace('/^\D*/', '', $str);
$val = '';
if (is_int($str))
$val = sprintf("%02s", $str);
else if (is_float($str))
$val = str_pad(sprintf("%0.2f", $str), 5, '0', STR_PAD_LEFT);
return $val.$temp_am_pm;
}
echo gmt_to_gmt("12am - 1pm", "GMT +0", "GMT +2.30");
?>
输出 - 02.30pm - 03.30pm