【PHP8.x】gmmktime関数の使い方

作成日: 更新日:

gmmktime関数は、指定された日付と時刻に対応するUnixタイムスタンプ(GMT/UTC)を返す関数です。Unixタイムスタンプとは、協定世界時(UTC)の1970年1月1日0時0分0秒からの経過秒数を整数で表したものです。

この関数は、mktime関数と似ていますが、gmmktime関数は常にGMT/UTC時間に基づいている点が異なります。mktime関数は、システムのタイムゾーン設定に基づいてローカル時間を解釈します。

gmmktime関数は、年、月、日、時、分、秒を引数として受け取ります。これらの引数はすべて整数でなければなりません。引数が省略された場合、現在のGMT/UTC時間が使用されます。

引数の順序は、年、月、日、時、分、秒です。引数の範囲外の値を指定した場合、gmmktime関数は自動的に値を調整します。例えば、月を13と指定した場合、翌年の1月として扱われます。同様に、時間を24と指定した場合、翌日の0時として扱われます。

gmmktime関数は、成功した場合はUnixタイムスタンプを返し、エラーが発生した場合はfalseを返します。PHP 5.1以降では、引数が無効な場合にE_WARNINGレベルのエラーが発生します。

gmmktime関数は、タイムゾーンに依存しない日付と時刻の計算を行う場合に特に役立ちます。例えば、データベースにGMT/UTCで日付と時刻を保存する場合や、複数のタイムゾーンにまたがるアプリケーションで日付と時刻を扱う場合に利用できます。システムエンジニアは、タイムゾーンの違いを意識した正確な日付と時刻の処理を実装するために、この関数を理解しておく必要があります。

基本的な使い方

構文(syntax)

gmmktime(int $hour = date("H"), int $minute = date("i"), int $second = date("s"), int $month = date("n"), int $day = date("j"), int $year = date("Y"), int $is_dst = -1): int|false

引数(parameters)

int $hour, ?int $minute = null, ?int $second = null, ?int $month = null, ?int $day = null, ?int $year = null

  • int $hour: 時刻を表す整数 (0-23)
  • ?int $minute: 分を表す整数 (0-59)。省略可能
  • ?int $second: 秒を表す整数 (0-59)。省略可能
  • ?int $month: 月を表す整数 (1-12)。省略可能
  • ?int $day: 日を表す整数 (1-31)。省略可能
  • ?int $year: 年を表す整数。省略可能

戻り値(return)

int|false

指定された日付と時刻に対応するUnixタイムスタンプ(1970年1月1日 00:00:00 UTCからの経過秒数)を整数で返します。指定された値が無効な場合はfalseを返します。

サンプルコード

gmmktime関数でGMTタイムスタンプを取得する

<?php

/**
 * gmmktime関数のサンプルコード
 *
 * gmmktime() は、指定された日付の Unix タイムスタンプを GMT (グリニッジ標準時) で返します。
 * mktime() との違いは、タイムゾーンを考慮しない点です。
 */

// 特定の日付の GMT タイムスタンプを取得する
$timestamp = gmmktime(12, 30, 0, 10, 15, 2024);

if ($timestamp === false) {
    echo "無効な日付です。\n";
} else {
    echo "2024年10月15日 12:30:00 GMT のタイムスタンプ: " . $timestamp . "\n";

    // タイムスタンプを日付文字列に変換する
    $dateString = gmdate("Y-m-d H:i:s", $timestamp);
    echo "日付文字列 (GMT): " . $dateString . "\n";
}

// 引数を省略した場合の挙動
$currentTimestamp = gmmktime(); // 現在時刻のタイムスタンプを返す
echo "現在の GMT タイムスタンプ: " . $currentTimestamp . "\n";

$currentDateString = gmdate("Y-m-d H:i:s", $currentTimestamp);
echo "現在の日付文字列 (GMT): " . $currentDateString . "\n";

gmmktime()関数は、指定された日時をGMT(グリニッジ標準時)のUnixタイムスタンプとして取得するために使用します。Unixタイムスタンプとは、1970年1月1日午前0時0分0秒(UTC)からの経過秒数を表す数値です。

引数には、時間($hour)、分($minute)、秒($second)、月($month)、日($day)、年($year)をそれぞれ整数で指定します。これらの引数は省略可能で、省略した場合は現在の時刻が使用されます。

gmmktime()関数は、指定された日時が有効な場合、対応するUnixタイムスタンプを整数値で返します。もし指定された日時が無効な場合(例えば、存在しない日付を指定した場合)、falseを返します。

サンプルコードでは、2024年10月15日12時30分0秒(GMT)のタイムスタンプを取得し、gmdate()関数を使ってそのタイムスタンプを日付文字列に変換しています。gmdate()関数は、指定されたタイムスタンプをGMTに基づいてフォーマットされた日付文字列に変換します。

また、引数を省略してgmmktime()を呼び出すことで、現在のGMTタイムスタンプを取得できます。これは、サーバーのタイムゾーン設定に依存せず、一貫したGMTベースの時刻情報を必要とする場合に便利です。タイムスタンプがfalseでないことを確認することで、日付の有効性をチェックできます。

gmmktime()関数は、日付をGMT(グリニッジ標準時)のUnixタイムスタンプに変換します。引数は「時、分、秒、月、日、年」の順で、省略すると現在の時刻が使用されます。mktime()関数と似ていますが、gmmktime()はタイムゾーンの影響を受けません。日付として正しくない値を指定すると、falseを返すため、必ずエラーハンドリングを行いましょう。タイムスタンプを扱う際は、gmdate()関数などGMTに対応した関数を使用すると、意図しないタイムゾーン変換を防ぐことができます。引数を省略した場合、サーバーのタイムゾーン設定に関わらずGMTで現在時刻を取得できますが、処理時間に注意してください。

【PHP8.x】gmmktime関数の使い方 | いっしー@Webエンジニア