1

異なるタイムゾーン間で変換するために初めて DateTime クラスを使用しています。

これが私が持っているものです

$USER_TIME_ZONE = new DateTimeZone('America/Los_Angeles');
$UTC = new DateTimeZone('UTC');
$schedule_date = new DateTime($call['triggerOn'], $USER_TIME_ZONE);
echo $schedule_date->format('m/d/Y h:i A');

$schedule_date = new DateTime($call['triggerOn'], $UTC);
echo $schedule_date->format('m/d/Y h:i A');

これが私の結果を見て、それらを変換しようとしている方法です

foreach ( $activities AS $call){ 
    $USER_TIME_ZONE = new DateTimeZone('America/Los_Angeles');
    $UTC = new DateTimeZone('UTC');
    $schedule_date = new DateTime($call['triggerOn'], $UTC);
    echo $schedule_date->format('m/d/Y h:i A');
 }

以下は $call['triggerOn'] の値です

2013-02-27 18:00:37
2013-02-02 01:11:07
2013-01-10 17:12:14
2013-02-27 22:29:42
2013-02-27 22:28:38
2013-02-25 21:53:12
2013-02-14 14:35:48
2012-12-13 14:03:16
2013-03-04 19:04:20
2013-03-01 18:52:48
2013-03-05 15:46:56
2013-03-11 15:26:17
2013-02-07 18:17:30
2013-03-05 18:04:25

私の出力は両方とも同じです!理由がわかりません。Windows Server 2008 R2 で PHP を実行しているため、サーバー側で行う必要がある構成はありますか。ご協力いただき、ありがとうございました。

4

2 に答える 2

1

DateTime::format() メソッドは、データが作成されたタイムゾーンの時間を返します。変換は行われません。したがって、渡すタイムゾーンに関係なく、出力時間は入力時間と同じになります。これは、フォーマット パラメータに「e」を追加することで確認できます。最初のケースではタイムゾーンが America/Los_Angeles で、2 番目のケースでは UTC であることがわかります。

おそらく、タイムゾーン間の時間を変換しようとしていますよね? これを行うには、1 つのタイムゾーンで 1 つの新しい DateTime オブジェクトを作成し、2 番目のタイムゾーンで setTimezone メソッドを呼び出して、結果をフォーマットします。

これはすべて、$call['triggerOn'] 値がタイムスタンプでも、タイムゾーンが識別された値でもないことを前提としています。その場合、DateTime コンストラクターの 2 番目のパラメーターは無視されます。

于 2013-03-21T17:49:27.790 に答える
0

$call['triggerOn'] の値を知ることは役に立ちますが、これはうまくいきます:

$USER_TIME_ZONE = 'America/Los_Angeles';
$UTC = 'UTC';
$schedule_date = new DateTime( $call['triggerOn'], $USER_TIME_ZONE );
echo $schedule_date->format( 'm/d/Y h:i A' );

$schedule_date = new DateTime( $call['triggerOn'], $UTC );
echo $schedule_date->format( 'm/d/Y h:i A' );

基本的に、新しい DateTime オブジェクトを作成して他の新しい DateTime オブジェクトのパラメーターとして使用する代わりに、代わりにタイムゾーン文字列を使用するとどうなるでしょうか? それは動作しますか?

于 2013-03-21T17:40:34.573 に答える