2010-11-28 22 views
4

私は、ユーザーの現地時間を計算する以下の方法が動作しないことがあると言われています。 PHPでこれを行う最良の方法は何ですか?職業はなんですか?PHPでタイムゾーンの差異計算をどのように扱いますか?

public function getTimeOffset ($time) { 
    $this->_cacheTimeOffset(); 
    if ($this->timeOffsetExecuted) { 
     $d = date("O"); 
     $neg = 1; 

     if (substr($d, 0, 1) == "-") { 
      $neg = -1; 
      $d = substr($d, 1); 
     } 

     $h = substr($d, 0, 2)*3600; 
     $m = substr($d, 2)*60; 

     return $time + ($neg * ($h + $m) * -1) + (($this->timeOffset + $this->getDstInUse()) * 3600); 
    } 
    return $time; 
} 

答えて

2

は、遷移履歴

+0

私は現在、ユーザーがプロフィールに自分のタイムゾーンを指定できるようにしています。 PHPを使って動的に取得できるだけで、タイムゾーンを質問する必要はないと言っていますか? – Webnet

+1

@Webnet - あなたはまだ自分のプロフィールに自分の現在のタイムゾーンを置く必要があります。おそらく、あなたはタイムゾーンのリストを提供し、ユーザに選択させることができます。サポートされているタイムゾーンの完全なリストを提供することができる 'DateTimeZone :: listIdentifiers' - http://www.php.net/manual/en/datetimezone.listidentifiers.php – ajreal

-1

迅速な解決策を明らかにDateTimeZone::getTransitionsこの方法は
、いくつかの国では、いくつかのタイムゾーンの更新を行う必要がある場合があります、このようDateTime::getOffsetとして、
またはDateTimeZone::getOffset

をDateTimeの拡張を使用します。

<?php echo date('g:i a', strtotime("now + 10 hours 30 minutes")); ?> 
+0

これは時刻の書式設定のためのものであり、時刻には関係しませんゾーンはまったくありません。 – Webnet

0

ちょうど非常によく似た質問に答えましたover here。私はそれをチェックすることをお勧めします。私は、タイムゾーンオフセット計算(単純な数式を使用し、次にdatetimezonedatetimeクラスを使用して)をかなり徹底的に行う2つの好ましい方法について説明しました。

最初の方法は、最も簡単 (最も論理的な)方法でしょう、それは ストアにある彼らのオフセット(すでに それを持っている場合、つまり)と乗算その 3600(1時間でによって秒)を入力して、 の値を現在のunixタイムスタンプに追加して、最終時刻が になるようにします。

もう1つの方法は、 DateTimeDateTimeZoneクラスを使用することです。 hereのように、これら2つのクラスがどのように機能するかは、 DateTimeZoneという2つのオブジェクトを作成することです.1つは タイムゾーン、もう1つはタイムゾーンを使用します。最初 パラメータは、(それぞれ)上記 DateTimeZoneオブジェクトへの参照である"now"と 秒であるとオブジェクトを作成します。その後、最初のパラメータとしてそのタイムゾーンオブジェクト を渡すあなたタイムゾーン オブジェクトに getOffsetメソッドを呼び出して、最終的に あなたは がその時間を取得するために、現在のUnix タイムスタンプに追加することができることを秒単位でオフセットを取得します ジョブを実行する必要があります。

1
date('Z'); 

秒UTCからのオフセットを返します。

関連する問題