0

PHP に DateTime オブジェクトがあります。ここにあります:

$base = new DateTime('2013-10-21 09:00', new DateTimeZone('America/New_York'));

を呼び出すと$base->getTimestamp()、予想どおり、 が表示されます1382360400

私のプロジェクトでは、moment.jsを使用しています。このタイムスタンプが「現地時間」であることを瞬間に伝えると、正常に動作します。

// Correct :)
moment.unix(1382360400).local().format('LLLL') // Monday, October 21 2013 9:00 AM

問題は、アプリの他のすべての日付が UTC である (これを除く) ため、JavaScript コードでは次のようになっていることです。

var theDate =  moment.unix(timestamp).utc();

他のすべての日付では、これは機能しますが、これは機能しません。 1382360400UTCではなく「現地時間」です。を呼び出すとsetTimezoneそれが修正されると考えたので、実行しました$base->setTimezone(new DateTimeZone('UTC'));

呼び出すvar_dump($base)と返されます:

object(DateTime)#1 (3) {
  ["date"]=>
  string(19) "2013-10-21 13:00:00"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(3) "UTC"
}

これは正しいように見えますが、そうすると、また$base->getTimestamp()取得1382360400します! そうじゃない!明らかに正しい日付がわかりません。

// Incorrect :(
moment.unix(1382360400).utc().format('LLLL')  // Monday, October 21 2013 1:00 PM

DateTimePHPからタイムスタンプを UTC で返すようにするにはどうすればよいですか? 1382346000から取得することを期待しています$base->getTimestamp()。これは、実行したときに得られるものです。

$UTC = new DateTime('2013-10-21 09:00', new DateTimeZone('UTC'));
echo $UTC->getTimestamp();

では、オブジェクトを UTCに変換し、必要なタイムスタンプを取得するにはどうすればよいDateTimeでしょうか?

// Correct :)
moment.unix(1382346000).utc().format('LLLL')  // Monday, October 21 2013 9:00 AM

(PHPデモ: https://eval.in/56348 )

4

1 に答える 1

1

タイムスタンプにはタイムゾーンがありません。DateTime オブジェクトは明らかに、日付と時刻ではなく、タイムスタンプを内部的に保存します。したがって、タイムゾーンを変更すると、同じタイムスタンプが残りますが、日付と時刻が変更されます。開始時は 9 時間で、タイム ゾーンを変更した後は 13 時間でした。

于 2013-10-21T19:30:08.727 に答える