2011-08-15 19 views
1

PSTタイムゾーンの日付を「YYYY-MM-DD」の形式で使用しています(例:「2011-08-15 ")。このパラメータはオプションです。私は苦労している2つの質問があります。PSTの日付に基づいてUTCで開始日時と終了日時を生成します。

この日付の開始日と終了日時をUTCに計算する必要があります。だから、

、入力された日付が、私は開始と終了の日付時刻を取得したい、2011-08-15の場合:

2011-08-15 07:00:00

2011-08-15 06:59:59

(これらは基本的に一日の始まりと終わりです)

2番目は、日付が渡されなかった場合のケースを処理することです。現在のPSTの日付をデフォルトにしてそこから開始したいと思います。したがって、現在の日時が2011-08-01 10:00:00の場合、最初のシナリオと同様の開始日時と終了日時を取得するには、入力された日付に基づいています。

2011-08-01 07:00:00

2011-08-01 06:59:59

私は、日付と日時の変換を扱うから私の髪を引っ張ってきました。私は何か手が抜けていると確信しています。

答えて

3

日付を解析し、PSTのタイムゾーンを想定しています

$date = new DateTime("2011-08-15", new DateTimeZone("PST")); 

タイムゾーンをUTCに変更します(これはすべてのコンバージョンを行います)

$date->setTimeZone(new DateTimeZone("UTC")); 

開始と終了を計算します。スタートは、私たちの$日付と終了は$日+ 1日

$start = $date; 
$end = clone $date; 
$end->modify("+1 day"); // now $end is $start + 1 day 

印刷開始/終了である:

printf("start: %s, end: %s\n", $start->format('Y-m-d H:i:s'), $end->format('Y-m-d Hi:s')); 

// this prints start: 2011-08-15 07:00:00, end: 2011-08-16 07:00:00 

ご質問の最後の部分では、簡単に二つの日付を比較することができます

if ($date > new DateTime()) { 
    $date->setTimeZone(new DateTimeZone("UTC")); 
} 
if ($date > new DateTime()) { // if $date is after now 
    // do something 
} 

だからあなたはそのような何かを行うことができます

オブジェクト指向の構文があまりよくない場合は、関数別名を使用することもできます。

$date = date_create(...); 
date_format($date, ...); 
date_modify($date, ...); 
// ... 
+0

ありがとう、これは本当に徹底的です。あなたの答えを読んだ後、私は私の質問に間違いを感じました。 +1日は欲しくない、実際には同じ日に開始日と終了日が必要です。「2011-08-15 07:00:00」と「2011-08-15 06:59:59」 – TMC

+0

あなたは* end *をどのように判断するのか分かりませんが、あなたの例を挙げれば、単純に – arnaud576875

+0

私は$ end-> modify( "+ 1 day") 'とそれに続く' $ end-> modify( " - 1分)を行うことができたと思います")'?あるいは、$ end-> modify( "+ 11時間59分")という単なる単一のものでしょうか? – TMC

-1

使用setTimezone機能

実施例(Iは、PSTのタイムゾーンではないので、私は明示的に設定する必要があります)

$date_input = "20011-09-15"; 
//$date_input = null; //That will emulate no-input case 
date_default_timezone_set("America/Los_Angeles"); //if you are in PST, you don't need this line 
$date_start = new DateTime($date_input); 
$date_end = new DateTime($date_input); 
$date_end->modify("+1 day"); 

/*$date_start->setTimezone(new DateTimeZone("America/Los_Angeles")); 
$date_end->setTimezone(new DateTimeZone("America/Los_Angeles"));*/ 

//end of date is equal to start of the next day. 
//But, if you need something like 2011-08-11 23:59:59 add $date_end->modify('-1 second') 
$date_start->setTime(0,0,0); 
$date_end->setTime(0,0,0); 

echo "Date Start PST:".$date_start->format("Y-m-d H:i:s")."<br/>"; 
echo "Date End PST:".$date_end->format("Y-m-d H:i:s")."<br/>"; 

//UTC is equal to London time. Almost :) 
$date_start->setTimezone(new DateTimeZone ('Europe/London')); 
$date_end->setTimezone(new DateTimeZone ('Europe/London')); 

echo "Date Start UTC:".$date_start->format("Y-m-d H:i:s")."<br/>"; 
echo "Date End UTC:".$date_end->format("Y-m-d H:i:s")."<br/>"; 
関連する問題