2

ドロップダウンに以下の時間間隔オプションがあります(これらは文字列です)

<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

私はオーストラリアの州のみに換算しているので、換算時に 1 日差が生じる可能性はありません。このリンクをチェックしてくださいhttp://www.timebie.com/tz/australiatimezone.php

4

2 に答える 2

2

この機能を試してみてください。(あなたの編集に基づいて、gmt_to_gmt 関数のデフォルト値の $to_gmt 変数を「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日を

于 2013-09-30T12:08:46.720 に答える