【PHP8.x】getTimestampメソッドの使い方
getTimestampメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
getTimestampメソッドは、PHPのDateTimeクラスに所属し、DateTimeオブジェクトが保持する日付と時刻の情報を、Unixタイムスタンプと呼ばれる形式で取得するメソッドです。Unixタイムスタンプとは、1970年1月1日00:00:00 UTC(協定世界時)を基準点として、そこからの経過秒数を表す単一の整数値のことです。
このメソッドを利用することで、DateTimeオブジェクトが表現する特定の日時を、コンピュータにとって扱いやすい数値形式に変換できます。例えば、異なるタイムゾーンやフォーマットで表現された複数の日時情報を、同じUnixタイムスタンプという数値に変換することで、簡単に比較したり、新旧を判断したりすることが可能になります。
データベースに日付や時刻を保存する際や、外部のAPIと連携して日時情報をやり取りする際など、システム間で一貫した日時表現が必要な場面で、Unixタイムスタンプは非常に広く用いられています。getTimestampメソッドは、このような場面でDateTimeオブジェクトから手軽にUnixタイムスタンプを取得するための基本的な手段となります。
戻り値は常に整数型(int)であり、PHP 8においてもその動作は一貫しています。日付と時刻を扱うプログラミングにおいて、このメソッドは日時情報の比較、計算、および他のシステムとの連携のために不可欠なツールとして機能します。システムエンジニアを目指す上で、日時の概念とUnixタイムスタンプの活用は重要であり、このメソッドはその理解を深める一助となるでしょう。
構文(syntax)
1<?php 2 3$dateTime = new DateTime(); 4$timestamp = $dateTime->getTimestamp(); 5 6?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
int
このメソッドは、DateTimeオブジェクトが表す日付と時刻を、UNIXエポック(1970年1月1日午前0時0分0秒 UTC)からの経過秒数を整数(int)型で返します。
サンプルコード
PHP DateTime::getTimestamp() でミリ秒を取得する
1<?php 2 3// 現在の日時を表すDateTimeオブジェクトを作成します。 4$dateTime = new DateTime(); 5 6// DateTime::getTimestamp() メソッドを使用して、Unixタイムスタンプ(秒単位)を取得します。 7// このメソッドは、1970年1月1日 00:00:00 UTC からの経過秒数を整数で返します。 8$timestampSeconds = $dateTime->getTimestamp(); 9 10// ミリ秒単位のUnixタイムスタンプを取得するためには、秒単位のタイムスタンプに 11// DateTime::format('v') で取得できるミリ秒部分を結合します。 12// 'v' フォーマット文字は、現在の秒におけるミリ秒 (000-999) を返します。 13$millisecondsPart = (int)$dateTime->format('v'); 14 15// 秒単位のタイムスタンプをミリ秒に変換し、ミリ秒部分を加算することで、 16// ミリ秒単位の正確なUnixタイムスタンプを作成します。 17$timestampMilliseconds = ($timestampSeconds * 1000) + $millisecondsPart; 18 19// 結果を出力します。 20echo "Unix Timestamp (seconds): " . $timestampSeconds . PHP_EOL; 21echo "Unix Timestamp (milliseconds): " . $timestampMilliseconds . PHP_EOL; 22 23?>
このPHPサンプルコードは、現在の日時からUnixタイムスタンプを取得する方法を示しています。まず、new DateTime()で現在の年月日と時刻を持つDateTimeオブジェクトを作成します。
次に、$dateTime->getTimestamp()メソッドを使用し、Unixタイムスタンプを秒単位で取得します。このメソッドは引数を取りません。戻り値は整数(int)で、1970年1月1日 00:00:00 UTC(協定世界時)からの経過秒数を返します。これは多くのシステムで時間の基準として利用されます。
サンプルコードではさらに、ミリ秒単位のUnixタイムスタンプを取得する方法も解説しています。getTimestamp()メソッドは秒単位までしか取得できないため、ミリ秒部分については$dateTime->format('v')を使います。format('v')は、現在の秒におけるミリ秒(000から999)を整数で返します。
最終的に、秒単位のタイムスタンプを1000倍してミリ秒に変換し、先ほど取得したミリ秒部分を加算することで、より精度の高いミリ秒単位のUnixタイムスタンプを作成しています。これにより、秒単位とミリ秒単位それぞれのタイムスタンプが取得でき、アプリケーションの要件に応じて使い分けることができます。
DateTime::getTimestamp()メソッドは、Unixタイムスタンプを秒単位の整数で返します。ミリ秒単位のタイムスタンプは直接取得できないため、DateTime::format('v')でミリ秒部分を文字列として取得し、秒単位のタイムスタンプと組み合わせて算出します。format('v')の戻り値は文字列ですので、数値計算に利用する際は(int)での型変換を忘れないでください。これにより、秒とミリ秒を組み合わせた正確なミリ秒単位のUnixタイムスタンプが得られます。
PHP DateTime::getTimestamp()とタイムゾーン
1<?php 2 3/** 4 * DateTime::getTimestamp() メソッドの使用例とタイムゾーンの影響をデモンストレーションします。 5 * 6 * UNIXタイムスタンプは、UTC (協定世界時) 1970年1月1日00:00:00 からの経過秒数です。 7 * タイムゾーンは DateTime オブジェクトが表す「瞬間」をローカルな時間で定義しますが、 8 * getTimestamp() はその「瞬間」が UTC でいつかを返します。 9 * そのため、同じ瞬間であれば、どのタイムゾーンで DateTime オブジェクトを作成しても、 10 * getTimestamp() の結果は同じになります。 11 */ 12function demonstrateGetTimestampAndTimezone(): void 13{ 14 echo "--- DateTime::getTimestamp() とタイムゾーンの理解 ---" . PHP_EOL; 15 echo "UNIXタイムスタンプは、常にUTC基準で特定の瞬間を表します。" . PHP_EOL . PHP_EOL; 16 17 // 現在スクリプトが使用しているデフォルトのタイムゾーンを表示 18 echo "現在のスクリプトのデフォルトタイムゾーン: " . date_default_timezone_get() . PHP_EOL . PHP_EOL; 19 20 // 1. デフォルトのタイムゾーンで現在のDateTimeオブジェクトを作成 21 $defaultDateTime = new DateTime(); 22 echo "1. デフォルトタイムゾーンでの現在時刻:" . PHP_EOL; 23 echo " DateTime (ISO 8601): " . $defaultDateTime->format('c') . PHP_EOL; 24 echo " UNIXタイムスタンプ: " . $defaultDateTime->getTimestamp() . PHP_EOL . PHP_EOL; 25 26 // 2. Asia/Tokyo タイムゾーンで現在のDateTimeオブジェクトを作成 27 // DateTimeZone オブジェクトを DateTime コンストラクタの第二引数に渡します。 28 $tokyoDateTime = new DateTime('now', new DateTimeZone('Asia/Tokyo')); 29 echo "2. Asia/Tokyo タイムゾーンでの現在時刻:" . PHP_EOL; 30 echo " DateTime (ISO 8601): " . $tokyoDateTime->format('c') . PHP_EOL; 31 echo " UNIXタイムスタンプ: " . $tokyoDateTime->getTimestamp() . PHP_EOL . PHP_EOL; 32 33 // 3. America/New_York タイムゾーンで現在のDateTimeオブジェクトを作成 34 $newYorkDateTime = new DateTime('now', new DateTimeZone('America/New_York')); 35 echo "3. America/New_York タイムゾーンでの現在時刻:" . PHP_EOL; 36 echo " DateTime (ISO 8601): " . $newYorkDateTime->format('c') . PHP_EOL; 37 echo " UNIXタイムスタンプ: " . $newYorkDateTime->getTimestamp() . PHP_EOL . PHP_EOL; 38 39 echo "--- 結果の考察 ---" . PHP_EOL; 40 echo "上記3つの例では、それぞれ異なるタイムゾーンで 'now' (現在の瞬間) を表す DateTime オブジェクトを作成しました。" . PHP_EOL; 41 echo "それぞれの DateTime (ISO 8601形式) の表示はタイムゾーンに応じて異なりますが、" . PHP_EOL; 42 echo "getTimestamp() が返す UNIXタイムスタンプは、ほぼ同じ値になっているはずです。" . PHP_EOL; 43 echo "これは、getTimestamp() がその瞬間がUTCでいつかを表現するためです。" . PHP_EOL . PHP_EOL; 44 45 // 補足: 同じUNIXタイムスタンプを基に、異なるタイムゾーンでDateTimeオブジェクトを再構成する例 46 $exampleTimestamp = $tokyoDateTime->getTimestamp(); // 東京時刻のUNIXタイムスタンプを使用 47 48 // UNIXタイムスタンプからDateTimeオブジェクトを作成するには、'@' プレフィックスを使用します。 49 $recreatedUtc = new DateTime('@' . $exampleTimestamp, new DateTimeZone('UTC')); 50 $recreatedTokyoFromTs = (new DateTime('@' . $exampleTimestamp))->setTimezone(new DateTimeZone('Asia/Tokyo')); 51 $recreatedNewYorkFromTs = (new DateTime('@' . $exampleTimestamp))->setTimezone(new DateTimeZone('America/New_York')); 52 53 echo "4. 同じUNIXタイムスタンプ ({$exampleTimestamp}) を異なるタイムゾーンで表示した場合:" . PHP_EOL; 54 echo " UTC で表示: " . $recreatedUtc->format('c') . PHP_EOL; 55 echo " Asia/Tokyo で表示: " . $recreatedTokyoFromTs->format('c') . PHP_EOL; 56 echo " America/New_York で表示: " . $recreatedNewYorkFromTs->format('c') . PHP_EOL; 57 echo " (DateTime::setTimezone() は、DateTimeオブジェクトの表示タイムゾーンを変更します)" . PHP_EOL; 58} 59 60// 関数を実行してデモンストレーションを開始 61demonstrateGetTimestampAndTimezone(); 62
DateTime::getTimestamp()メソッドは、DateTimeオブジェクトが表す日付と時刻をUNIXタイムスタンプとして取得するために使用します。このメソッドに引数は必要なく、戻り値として整数値(int)を返します。
UNIXタイムスタンプは、UTC(協定世界時)の1970年1月1日00:00:00からの経過秒数を表す、世界共通の時間表現です。このため、DateTimeオブジェクトがどのタイムゾーンで作成されたとしても、それが表す「特定の瞬間」が同じであれば、getTimestamp()は常に同じUNIXタイムスタンプを返します。
提供されたサンプルコードでは、スクリプトのデフォルトタイムゾーン、日本時間(Asia/Tokyo)、そしてニューヨーク時間(America/New_York)でそれぞれ「現在」のDateTimeオブジェクトを作成しています。それぞれのオブジェクトが異なるローカル時間を表示する一方で、getTimestamp()が返すUNIXタイムスタンプはほぼ同じ値になります。これは、getTimestamp()がタイムゾーンに依存せず、特定の瞬間をUTC基準で数値化する機能であることを明確に示しています。
DateTime::getTimestamp()は常にUTC(協定世界時)基準のUNIXタイムスタンプを返します。そのため、DateTimeオブジェクトをどのタイムゾーンで作成しても、それが同じ瞬間を表していれば、getTimestamp()の結果は同一になります。タイムゾーンはDateTimeオブジェクトが表す日付時刻の「表示」に影響するだけで、その瞬間がUTCでいつかという値自体は変わりません。この点を誤解すると、異なるタイムゾーンでの時刻比較や保存で意図しない結果を招く可能性があります。UNIXタイムスタンプからDateTimeオブジェクトを生成する際は、new DateTime('@' . $timestamp)形式を使用し、表示タイムゾーンはsetTimezone()で別途設定してください。