2013-03-25 5 views
36

現在の時刻と現在の時刻との間の時間を変換しようとしています。ここでDateTimeクラスを使用してPHPでタイムゾーンを変換する方法は?

は、私がやっていることです:

$schedule_date = new DateTime($triggerOn, new DateTimeZone('UTC')); 
$triggerOn = $schedule_date->format('Y-m-d H:i:s'); 

echo $triggerOn; 

出力値が形式に変更する唯一のものは変更されません。

$triggerOnAmerica/Los_Angelesタイムゾーン

これに基づいて生成された文字列は、私の文字列のような前と後にどのように見えるかです:

BEFORE 04/01/2013 03:08 PM 
AFTER  2013-04-01 15:08:00 

ので、ここでの問題は、日時をUTCに変換されないということです。

+1

'$ triggerOn'は何が含まれていますか? –

+0

DateTime()コンストラクタは、最初の引数が時間であることを期待しています。あなたの$ triggerOnが適切な時間値ではないかもしれません。 – mavili

+0

$ triggerOn value id 04/01/2013 03:08 PM – Jaylen

答えて

76

このされています、しかし、日時をフォーマットする前に、あなたは、所望の出力タイムゾーンを設定していない

$triggerOn = '04/01/2013 03:08 PM'; 
$user_tz = 'America/Los_Angeles'; 

echo $triggerOn; // echoes 04/01/2013 03:08 PM 

$schedule_date = new DateTime($triggerOn, new DateTimeZone($user_tz)); 
$schedule_date->setTimeZone(new DateTimeZone('UTC')); 
$triggerOn = $schedule_date->format('Y-m-d H:i:s'); 

echo $triggerOn; // echoes 2013-04-01 22:08:00 
+0

ありがとう、これは私が探していたものです。ありがとうございました:) – Jaylen

+0

読者にはちょうどfyi: 'setTimeZone'は、オブジェクトのタイムゾーン文字列とdatetime値を変更します。 formatは、文字列を取得するために使用されるものです。 'setTimeZone'はタイムゾーンのプロパティのみを変更するのではなく、' setTimeZone'の実行時に実際の数値の時間値が影響を受けます。 – ahnbizcad

+0

@ahnbizcad 04/01/2013 03:08 PM in Los Angelesは、2013年4月1日22:08:00(UTC)とまったく同じ時刻です。時間自体は変わらず、時間帯だけが変わります。 – Mike

2

ローカルタイムゾーンを使用して日付を作成し、DateTime::setTimeZone()を呼び出して変更します。あなたが探しているもの

+0

usersetTimezoneを変更するにはどうすればいいですか?$ triggerOnは現地時間で作成され、UTCに変換します。 – Jaylen

+1

なぜdownvote、正しいとマークされた答えを考慮すると、まさにこれを行うか分かりません。詳細は不足していましたが、これはかなり簡単な質問です。 – Jerry

13

あなたは、日付/時間を浪費し、正しくタイムゾーンを設定しています。ここではUTCタイムゾーンを受け入れる例であり、アメリカ/ Los_Angelesタイムゾーンに日付/時刻を変換します。あなたは `新しい日時()`にそれを渡す前に、

<?php 
$original_datetime = '04/01/2013 03:08 PM'; 
$original_timezone = new DateTimeZone('UTC'); 

// Instantiate the DateTime object, setting it's date, time and time zone. 
$datetime = new DateTime($original_datetime, $original_timezone); 

// Set the DateTime object's time zone to convert the time appropriately. 
$target_timezone = new DateTimeZone('America/Los_Angeles'); 
$datetime->setTimeZone($target_timezone); 

// Outputs a date/time string based on the time zone you've set on the object. 
$triggerOn = $datetime->format('Y-m-d H:i:s'); 

// Print the date/time string. 
print $triggerOn; // 2013-04-01 08:08:00 
+1

ソリューションを説明するためにこの例をありがとうございます。 – Jaylen

関連する問題