【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()で別途設定してください。