1

時間が先行する html ドキュメントにコード行を追加しようとしています。タイムゾーンを相対的なものにしたいのですが、デフォルトの UTC から変更することはできません。php.ini ファイルを PST に変更し、date_default_timezone_set('America/Los_Angeles'); を使用しました。それでも、タイムゾーンより 7 時間進んだ時刻が表示されます。時間を扱うコードは次のとおりです。

session_start();
if(isset($_SESSION['name']))
{
    date_default_timezone_set('America/Los_Angeles');

    $msg = $_POST['text'];

    $fo = fopen("log.html", 'a');
    fwrite($fo, "<div class=msgln>(".date("g:i A").") <b  style=color:red;>".$_SESSION['name']."</b>: ".stripslashes(htmlspecialchars($msg))."<br></div>
    ");
    fclose($fo);
}
4

3 に答える 3

5

サーバーは UTC に設定する必要があり、デフォルトを変更する必要はありません。代わりに、時間に基づいて DateTime オブジェクトを作成し、それを必要なタイムゾーンに変換して表示します。

$now = new DateTime();
$now->setTimezone(new DateTimeZone('America/Los_Angeles'));
echo $now->format('g:i A');

フォーマット文字列が有効かどうかはわかりませんが、フォーマット メソッドは、元の例で使用していた date() 関数で受け入れられるものと互換性があると考えられます。

于 2012-08-11T04:33:09.773 に答える
1

まず、価値のあるタイムゾーンを使用していることを確認してください。サポートされているタイムゾーンのリストは、PHP ドキュメントで確認できます。

2 番目の問題は、タイムスタンプを指定せずにdate()を使用することです。これはデフォルトでtime()によって生成されたタイムスタンプであり、(ドキュメントのコメントに基づいて) UTC 時間です。strftime()を使用するか、手動で UTC から差を引く必要があります。

于 2012-08-11T04:17:13.847 に答える
1

「etc/GMT」を使用する場合、次のように dateTime オブジェクトを目的のタイム ゾーンに設定できます。

$dtz = new DateTimeZone('etc/GMT-10');
$dt = new DateTime(date("Y-m-d h:i A"), $dtz); 
$date = gmdate("Y-m-d h:i A", $dt->format('U'));
于 2012-08-11T06:14:00.547 に答える