0

「今日」という単語から作成された DateTime と「今日」を表すタイムスタンプが同一ではないのはなぜですか?

$zone = 'US/Eastern';
$str = 'today';

$dt_zone = new DateTimeZone($zone);
$myDateTime = new DateTime($str, $dt_zone);

$my_stamp = $myDateTime->getTimestamp();

echo "from $my_stamp {$zone}:".$myDateTime->format('d-m-Y H:i:s') . "<br>";

結果が得られました: from 1383886800 US/Eastern:08-11-2013 00:00:00

同じコードを作成しますが、受信したタイムスタンプから DateTime を生成します。

$zone = 'US/Eastern';
$str = '@1383886800';

$dt_zone = new DateTimeZone($zone);
$myDateTime = new DateTime($str, $dt_zone);

$my_stamp = $myDateTime->getTimestamp();

echo "from $my_stamp {$zone}:".$myDateTime->format('d-m-Y H:i:s') . "<br>";

そして、異なる結果が得られましたが、タイムスタンプは同じでした: 結果が得られました: from 1383886800 US/Eastern:08-11-2013 05:00:00

タイムスタンプから日時オブジェクトを作成する別の方法が存在する可能性がありますか? 後で $myDateTime->modify('2 pm'); を実装できます。変更されたタイムスタンプを受け取ります(方法がわからないので、 $myDateTime->getTimestamp() は変更前のタイムスタンプを返します)

4

2 に答える 2

0

あなたのタイムゾーンを無視しているようです..マニュアルにはそれについてのコメントがあります。しかし、タイムスタンプを設定する方法があります。期待される結果になるのはどれですか

$zone = 'US/Eastern';

$dt_zone = new DateTimeZone($zone);
$myDateTime = new DateTime(null, $dt_zone);

$myDateTime->setTimestamp(1383886800); // Set from timestamp

$my_stamp = $myDateTime->getTimestamp();

echo "from $my_stamp {$zone}:".$myDateTime->format('d-m-Y H:i:s') . "\n";
于 2013-11-08T14:34:04.420 に答える
0

IMO、メソッドを使用する代わりに、2番目の例で既に行ったようにタイムスタンプを入力する方が良い/より良い解決策ですsetTimestampこの demosetTimezoneのように、メソッドを呼び出して、その DateTime オブジェクトにタイムゾーンを設定するだけです。

$myDateTime = new DateTime('@1383886800');
$myDateTime->setTimezone(new DateTimeZone('US/Eastern'));

DateTime オブジェクトの作成時にタイムゾーンが無視される理由は、UNIX タイムスタンプを入力として適用すると、デフォルトのタイムゾーン UTC が使用され、指定されたタイムゾーンが無視されるためです。$timezone パラメータの注を参照してください

The $timezone parameter and the current timezone are ignored when the $time 
parameter either is a UNIX timestamp (e.g. @946684800) or specifies a timezone 
(e.g. 2010-01-28T15:00:00+02:00).
于 2013-11-08T17:16:23.643 に答える