2011-01-20 6 views

答えて

48

これはあなたのPHPの変数としてタイムゾーンを取得します。 jQueryとPHPを使って関数を書きました。これはテストされ、動作します!あなたが変数としてタイムゾーンを持っているしたいPHPページ

、どこかのページの最上部付近のコードスニペットを持っている:

<?php  
    session_start(); 
    $timezone = $_SESSION['time']; 
?> 

これは、セッション変数「時間」を読みます、私たちはこれから作成しようとしています。あなたはjQueryのを含めるために必要なすべての最初の<head>セクション、内の同じページで

、:<head>セクションでも

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> 

,,これはjQueryを貼り付けます。

<script type="text/javascript"> 
    $(document).ready(function() { 
     if("<?php echo $timezone; ?>".length==0){ 
      var visitortime = new Date(); 
      var visitortimezone = "GMT " + -visitortime.getTimezoneOffset()/60; 
      $.ajax({ 
       type: "GET", 
       url: "http://domain.com/timezone.php", 
       data: 'time='+ visitortimezone, 
       success: function(){ 
        location.reload(); 
       } 
      }); 
     } 
    }); 
</script> 

あなたは可能気づいていないかもしれませんが、実際のドメインに変更する必要があります。

最後の1つです。あなたはおそらく、ちょっとしたtimezone.phpが何であるか疑問に思っています。 JavaScriptを実行し、これが正常に動作する場合

<?php 
    session_start(); 
    $_SESSION['time'] = $_GET['time']; 
?> 

が、それは最初のページをロードします(上記のURLとそれにtimezone.phpとポイントと呼ばれる新しいファイルを作成します):まあ、それは単に、これがあります、ページをリロードします。 $ timezone変数を読んで、それをあなたの喜びに使うことができます!現在のUTC/GMTタイムゾーンオフセット(GMT -7)または現在のタイムゾーンを返します。

あなたはそれがJavaScriptを使用してほど正確ではないだろう、私のblog

乾杯サーバー側で

</Westy92>

+0

私はこれをほとんど諦めました!ありがとう! – andrei

+1

$ timezoneが定義されていないとエラーが表示されます。どうして? – arboles

+6

私は、このソリューションは基本的には間違っていると考えています(少なくともいくつかの状況では)。これは、ユーザーが時間を、希望するものに、http://domain.com/timezone.phpを単に呼び出すだけで変更できるようにするためです。 –

9

Odedが答えたように。あなたはjavascriptでこの種の検出機能を持つ必要があります。

私はこれに苦労して、オフセットが十分ではないことに気付きました。たとえば、夏時間に関する情報は一切表示されません。 zoneinfoのデータベースキーにマップするコードを書くことになりました。

1年のうちのいくつかの日付をチェックすると、より正確にタイムゾーンを特定できます。

は、ここにスクリプトを試してみてください:http://jsfiddle.net/pellepim/CsNcf/

は、単にあなたのシステムのタイムゾーンを変更し、それをテストするために実行]をクリックします。クロムを実行している場合は、新しいタブで各テストを行う必要があります(タイムゾーンの変更を取得するには、safarを再起動する必要があります)。

あなたがチェックアウトコードの詳細が必要な場合:https://bitbucket.org/pellepim/jstimezonedetect/

+0

これはおそらく最も合理的なアプローチです。 –

27

にこれについての詳細を読むことができます。一方で、そのような課題を解決する必要があることもあります。この場合、可能な解決策を共有するだけで、私はこの答えを書いています。

ユーザーのタイムゾーンを決定する必要がある場合は、Geo-IPサービス経由で行うことができます。タイムゾーンを提供するものもあります。たとえば、この1つ(http://smart-ip.net/geoip-api)は次のように役立ちます。

<?php 
$ip  = $_SERVER['REMOTE_ADDR']; // means we got user's IP address 
$json = file_get_contents('http://smart-ip.net/geoip-json/' . $ip); // this one service we gonna use to obtain timezone by IP 
// maybe it's good to add some checks (if/else you've got an answer and if json could be decoded, etc.) 
$ipData = json_decode($json, true); 

if ($ipData['timezone']) { 
    $tz = new DateTimeZone($ipData['timezone']); 
    $now = new DateTime('now', $tz); // DateTime object corellated to user's timezone 
} else { 
    // we can't determine a timezone - do something else... 
} 
+1

http://smart-ip.net/にアクセスすることはできません。だから、この解決策はあいまいです。私は彼らがサーバーをシャットダウンしたと思う。したがって、これによって返される結果がnullであるため、このコードは自己責任で使用してください。 –

+2

(-1)http://smart-ip.net/geoip-json/202.191.214.178 - 一時的にサービスを利用できない – Chinmay235

+3

今すぐこのサイトを試すことができます:http://ip-api.com/json/ –

関連する問題