2016-07-04 8 views
1

サーバー送信イベントを使用していて、ビューアーの現地時間に合わせて時刻を表示しようとしています。PHP、サーバー送信イベント - date_default_timezone_get()がリモートファイルで正常に動作しない

私のデータベースのすべての時間はDATETIMEフィールドに、GMTとして格納されます。

コードブロック1

date_default_timezone_set('GMT'); 
$now = date('Y-m-d H:i:s'); 

$stmt = $db->prepare('INSERT INTO...'); 
$stmt->execute(array($now)); 

そして逆(それが必要以上におそらくより複雑):

コードブロック2

がリモート-というファイルにあるときに

これはすべてのウィンドウは、ブラウザでのライブのとき、正常に動作しますが、離れて落ちる:

はJavaScript

コード・ブロック3

var src = new EventSource('sse_bot.php?uid=' + userID); 

ここで、date_default_timezone_get()sse_bot.phpファイルにあります。

私は、ブラウザのウィンドウからセッション変数を設定してみました:

コード・ブロック4

$utimezone = date_default_timezone_get(); 
$_SESSION['tzone'] = $utimezone; 

、その後sse_bot.phpファイルにそれを使用して:

コードブロック5

$utimezone = $_SESSION['tzone']; 

ダイスはありません。

どのような考えですか?

EDIT 1

私は戻って、それをエコー、および$utimezone = $_SESSION['tzone'];は、適切な値(私の場合は 'アメリカ/デンバー')にそれをを設定しません。しかし、それは問題がラインで、具体的には、あるようです:私はブラウザ経由でコードブロック2を使用する場合

コードブロック6

$date->setTimezone(new DateTimeZone($utimezone)); 

、それが完璧に動作します。

コードブロック7

$date->setTimezone(new DateTimeZone('America/Denver')); 

そして、すべてが順調である:私も、ラインを変更することができます。

sse_bot.phpファイルと同じ変更を加えても効果はありません。すべての軽微な後に返される時間は、それに入った時間と同じです。

+0

FWIW:今後の参考のために、常にUTCとして保存し、そこからの変換:) – zanderwar

答えて

0

問題は、私がそれ以外の設定をしていないため、タイムゾーンがすでに「アメリカ/デンバー」だったことでした。ブラウザのバージョンでは、別の場所に設定されていますが、sse_bot.phpではそうではありませんでした。

ジャスト追加する必要があります。

date_default_timezone_set('GMT'); 

はどこか コードブロック6に先行して、ボブのあなたのおばさん。

(おそらくに値する答えられない、とのコメントに適し、butfutureのstumblersがより容易にこの1が見つかります。)

0

ここで私は思っているポイントがありません。すべてのPHPはサーバー上で実行されるため、サーバーのタイムゾーンのバージョンが常に反映されます。つまり、すべての場合に予想される動作です。クライアントのタイムゾーンを検索する場合は、Javascriptでクエリを実行し、報告された値をサーバーに返す必要があります。

+0

ご覧ください。私の答え。 PHPは、適切な識別子が設定されている限り、時間の変換を行うことができます。私の場合は、現在のタイムゾーンをGMTに設定することを怠りました – Birrel

関連する問題