8

DateTime オブジェクトから、さまざまな TimeZones の時刻を取得することに興味があります。DateTime::setTimezone doc で説明されているように、DateTime オブジェクトが文字列から作成されている場合、これは非常にうまく機能します。

$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";

$date->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo $date->format('Y-m-d H:i:sP') . "\n";

$date->setTimezone(new DateTimeZone('UTC'));
echo $date->format('Y-m-d H:i:sP') . "\n";

echo $date->getTimestamp() . "\n";

上記の例では、次のように出力 さ れ
ます 。



ここが興味深い部分です。タイムスタンプを取得し、手動の指示に従ってそれを使用して DateTime オブジェクトを開始します。

$date2 = new DateTime('@946641600');

$date2->setTimezone(new DateTimeZone('Pacific/Nauru'));
echo $date2->format('Y-m-d H:i:sP') . "\n";

$date2->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo $date2->format('Y-m-d H:i:sP') . "\n";

$date2->setTimezone(new DateTimeZone('UTC'));
echo $date2->format('Y-m-d H:i:sP') . "\n";

echo $date2->getTimestamp() . "\n";

// [編集] うーん... 申し訳ありませんが、この出力は間違っています...
1999-12-31 12:00:00+00:00
1999-12-31 12:00:00+00: 00
1999-12-31 12:00:00+00:00
946641600

UTC 永遠に!!! タイムゾーンはもう変更できません!?!

それはPHPですか、それとも私ですか?バージョン 5.3.15

4

2 に答える 2

7

わかりました、それで私は自分で怒っていました。もちろん、間違っているのは私です...はっきりさせるために、ここここ
のドキュメントに関連するビットをピックアップします。 マニュアルは次のように述べています。

// Using a UNIX timestamp.  Notice the result is in the UTC time zone.
$date = new DateTime('@946684800');
echo $date->format('Y-m-d H:i:sP') . "\n";

実際、 setTimezone を使用して、タイムゾーンで時刻を再度取得できます (システムがそのように設定されている場合に期待できます!):

$timezone = new DateTimeZone('Europe/Madrid');
$date->setTimezone(new DateTimeZone('Pacific/Chatham'));

ご了承ください

$date =  new DateTime('@1306123200', new DateTimeZone('Europe/Madrid'));

とにかくUTCにいるので、誤解を招く可能性があります! (そして、はい、コンストラクタのドキュメントで非常に明確に指定されています。注意してください;)

ありがとう @hakre みんなありがとう!

于 2012-10-17T15:17:31.303 に答える
4

それはあなただけです。PHPに関する限り、それはすべて問題なくダンディーです.PHPマニュアルはこれをうまくカバーしています:http://www.php.net/manual/en/datetime.construct.php

于 2012-10-17T14:23:18.627 に答える