【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で現在時刻を取得できますが、処理時間に注意してください。