【PHP8.x】gmmktime関数の使い方
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)
1gmmktime(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タイムスタンプを取得する
1<?php 2 3/** 4 * gmmktime関数のサンプルコード 5 * 6 * gmmktime() は、指定された日付の Unix タイムスタンプを GMT (グリニッジ標準時) で返します。 7 * mktime() との違いは、タイムゾーンを考慮しない点です。 8 */ 9 10// 特定の日付の GMT タイムスタンプを取得する 11$timestamp = gmmktime(12, 30, 0, 10, 15, 2024); 12 13if ($timestamp === false) { 14 echo "無効な日付です。\n"; 15} else { 16 echo "2024年10月15日 12:30:00 GMT のタイムスタンプ: " . $timestamp . "\n"; 17 18 // タイムスタンプを日付文字列に変換する 19 $dateString = gmdate("Y-m-d H:i:s", $timestamp); 20 echo "日付文字列 (GMT): " . $dateString . "\n"; 21} 22 23// 引数を省略した場合の挙動 24$currentTimestamp = gmmktime(); // 現在時刻のタイムスタンプを返す 25echo "現在の GMT タイムスタンプ: " . $currentTimestamp . "\n"; 26 27$currentDateString = gmdate("Y-m-d H:i:s", $currentTimestamp); 28echo "現在の日付文字列 (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で現在時刻を取得できますが、処理時間に注意してください。