$dateToday = strtotime(gmdate("m/d/y"));
が、これは、GMTの日付を返すことになっています。
全くありません。
gmdate()
は、GMTタイムゾーンを使用して日付をフォーマットします。 1つの引数で呼び出すので、time()
を呼び出すことによってフォーマットする日付を取得します。
time()
は、現在のタイムスタンプ、つまりJan 1, 1970, 0:00:00 UTC
から経過した秒数を返します。
次に、gmdate()
は、最初の引数で指定した形式を使用して、2番目の引数(現在のタイムスタンプ)を表示します。 gmdate("m/d/Y")
によって返される値は07/28/2017
です。
07/28/2017
は、それを日付と解釈しようとするstrtotime()
に渡され、そこからタイムスタンプが計算されます。時間構成要素が含まれていないため、strtotime()
は時刻が0:00:00
であるとみなします。
ここにキャッチが来ます。提供された文字列にはタイムゾーン情報も含まれていないため、PHPはその設定を使用してタイムゾーンを想定します。すでに発見したように、2つのサーバーでコードを実行すると、構成が異なるため異なる結果が生じる可能性があります。私にとって
、strtotime(gmdate('m/d/Y'))
戻り1501200000
、これは(私がテストに使用されるPHPはそのdefault timezoneとして「UTC」を使用しているため)は本日(July 18, 2017
)はUTC
タイムゾーンで開始タイムスタンプ(時間のモーメント)です。異なるサーバーで取得した値は、今日のそれぞれのタイムゾーンで開始された時刻です。
私のタイムゾーン(Europe/Bucharest
)に正しく設定されたPHPで同じコードを実行すると、1501189200
が得られます。現在がUTC+3
(東ヨーロッパ標準時の標準+2
+夏時間のため1
時間)になっているため、UTC
で使用する値よりも前には10800
秒です。
PHPは現在、DateTime
とその名前がDate
で始まる他のクラス(ドキュメントで見つける)の日付と時刻を処理するクラスを提供しています。古いdate & time functionsより使いやすく、タイムゾーンの処理方法も知っています(古い関数はわかりません)。あなたにも(希望の時間帯に)「今」のためDateTime
オブジェクトを作成して設定することができます
$dateToday = new DateTime("today 0:00:00", new DateTimeZone("UTC"));
:UTCタイムゾーンに今日の開始を格納DateTime
オブジェクトを作成
はほど簡単です0:00:00
への時間:コードで変更されていないDateTime
オブジェクトに対して
$dateToday = new DateTime("now", new DateTimeZone("UTC"));
$dateToday->setTime(0, 0, 0);
(彼らは読み取り専用されている)、あなたがより良いDateTimeImmutable
オブジェクトを作成します。このクラスは、格納している値の偶発的な変更を防ぎます。
Use DateTime(http://php.net/manual/en/class.datetime.php) – Neodan
*「ここで私は何が欠けていますか?」 - タイムゾーンが何であるかをよく読んで理解する時間計算やPHP [日付/時刻関数](http://php.net/manual/en/ref.datetime.php)の知識にも影響します。私はそれらについて読むことをお勧めしますが、それらを使用しないでください。代わりに、['DateTime'](http://php.net/manual/en/class.datetime.php)と関連するクラスを使用してください。それらは使いやすく、タイムゾーンの完全なサポートを提供します(古い日付/時刻関数はそうではありません)。 – axiac
サンプル:date_default_timezone_set( 'Europe/Berlin'); –