5

サインアップ時にユーザーのタイムゾーンを文字列として取得しようとしています。例:

$timezone = "Asia/Tel_Aviv";

この問題を調査しているときに、Javascript でタイムゾーン オフセットを取得する方法を見つけましたが、上記のようにタイムゾーン オフセットを php のタイムゾーン文字列に変換する方法についてはまだ不明です。

または、各ユーザーのタイムゾーン文字列を取得するためにJavascript / PHPで使用する他の方法はどれですか?

これにアプローチする方法が本当にわかりません。

4

4 に答える 4

12

これは PHP だけではできません。

Javascript を使用して Cookie に値を設定し、PHP を使用して次のページ (再) ロードで Cookie を読み取ることができます。

Javascript:

var dateVar = new Date()
var offset = dateVar.getTimezoneOffset();
document.cookie = "offset="+offset;

PHP:

echo $_COOKIE['offset'];

これを使用して、オフセットを PHP のわかりやすいタイムゾーン名に変換します。Javascript はオフセットを分単位で返しますが、この PHP 関数は入力が秒単位であると想定しているため、60 を掛けます。3 番目のパラメーターは、夏時間かどうかのブール値です。マニュアルを読み、必要に応じてコードを更新してください。

echo timezone_name_from_abbr("", intval($_COOKIE['offset'])*60, 0);

http://php.net/manual/en/function.timezone-name-from-abbr.php

于 2013-02-24T11:07:12.127 に答える
3
  1. オフセットからタイムゾーン名を取得することはできません。これは、常に同じオフセットを持つタイムゾーンが多数あるため、オフセットに基づいて 1 つを選択できないためです。(そうすると、後でタイムゾーンが DST に入るとき、または DST から外れてオフセットが変更されたときに、これはあなたを悩ませます。
  2. あなたの最善の策は、最初の最良の推測としてIPアドレスによる地理位置情報を実行し(グーグル、そこにたくさんの資料があります)、次にユーザーにタイムゾーンを自分で選択するオプションを提供することです.
于 2013-02-24T11:06:40.323 に答える
2
function tzone(){
    if(isset($_SESSION["tz"])){ $return = $_SESSION["tz"]; } else {
        $ip = $_SERVER["REMOTE_ADDR"];
        $getip = file_get_contents("http://freegeoip.net/json/$ip");
        $getip = json_decode($getip);
        $lat = $getip->latitude; $lng = $getip->longitude; $country = $getip->country_name;
        $getzone = file_get_contents("http://api.geonames.org/timezoneJSON?lat=$lat&lng=$lng&username=demo"); //you can change "demo" to your own username. its free service
        $getzone = json_decode($getzone);
        $zone = $getzone->timezoneId;
        $_SESSION["tz"] = $zone;
        $return = $_SESSION["tz"];
    }
    return $return;
}
于 2014-01-11T19:48:48.290 に答える