2011-12-23 12 views
2

私は世界中のさまざまなUbuntuサーバー上で動作するPHPで書かれたWebアプリケーションを持っています。 一部のサーバーは現地時間に実行するように構成され、一部はUTCで実行されます。これは顧客によって異なります。PHPのシステムのタイムゾーン設定を使用

私はphp.iniファイルを編集してdate.timezoneを設定することができますが、このようなデータは手動で入力して間違った日付になることがあります。

システム(tzdata)で既に定義されているタイムゾーンを使用するにはどうすればよいですか?

他の言葉:(長い)タイムゾーン名をPHPのシステムからdate_default_timezone_set()で使用するにはどうすればできますか?

答えて

1

あなたが使用できるタイムゾーンを設定している場合:アンドレイKnuppは彼の答えに与えた助けを借りてhttp://php.net/manual/en/function.date-default-timezone-get.php

それともhttp://php.net/manual/en/function.timezone-name-from-abbr.php

+0

date_default_timezone_get()php.iniのどちらdate.timezoneでは設定されているので、私を助けにはなりません、と私はdate_default_timezone_set()はまだ行っていません。しかし、timezone-name-abbr()はリンクがありませんでした。ありがとう! – Stoffisimo

4

を、私はこの1つを解決することができました。

echo "Time: " . date("Y-m-d H:i:s") . "<br>\n"; 

$shortName = exec('date +%Z'); 
echo "Short timezone:" . $shortName . "<br>"; 

$longName = timezone_name_from_abbr($shortName); 
echo "Long timezone:" . $longName . "<br>"; 

date_default_timezone_set($longName); 
echo "Time: " . date("Y-m-d H:i:s") . "<br>\n"; 

は、出力を提供します:

Time: 2011-12-23 23:29:45 
Short timezone:MYT 
Long timezone:Asia/Kuala_Lumpur 
Time: 2011-12-24 06:29:45 

更新:タイムゾーンの短い名前を一意ではありません。例えば、アメリカとオーストラリアの両方で、timezone_name_from_abbrには、時には私がしたくないものを選ぶための "EST"があります。オフセットの大きさを日付で尋ねることができます。正しいタイムゾーン:

$offset = exec('date +%::z'); 
$off = explode (":", $offset); 
$offsetSeconds = $off[0][0] . abs($off[0])*3600 + $off[1]*60 + $off[2]; 
$longName = @timezone_name_from_abbr($shortName, $offsetSeconds); 
+0

シンプルなソリューションをありがとう。私はユーザーのために最初の推測を提供するだけでした。この適用には、システム時間がデフォルトになるかどうかは関係ありません。あなたの推測はとてもうまくいった。 – ndasusers

関連する問題