PHP gmmktime関数の使い方

この記事のポイント

PHP開発でUTCタイムスタンプを扱う際に欠かせないgmmktime関数について、基本から応用まで詳しく解説します。

  • 日時からUTCタイムスタンプへの変換機能
  • mktime関数とのタイムゾーン処理の違い
  • 実際の開発現場で使える8つの実用パターン

これらのポイントを押さえることで、国際的なWebアプリケーション開発に必要な時刻処理スキルを身につけることができます。

目次

gmmktime関数とは?

gmmktime関数は、指定した日時に基づいてUTC(協定世界時)のUnixタイムスタンプを生成する関数です。通常のmktime関数がローカルタイムゾーンを使用するのに対し、gmmktime関数は常にUTCを基準とします。国際的なWebアプリケーションやAPIでは、異なるタイムゾーンのユーザー間でも一貫した時刻データを扱えるため、非常に重要な機能です。引数として時、分、秒、月、日、年を指定できます。

なお、PHP8.0以降は「時」のパラメータが必須で、「時」以外を省略した場合は現在値が使用されます。

【関連】
PHPをもっと詳しく学ぶならpaizaラーニング

基本構文

gmmktime関数の基本的な構文と使用方法を、具体的なコード例で説明します。関数の引数は左から順に、時、分、秒、月、日、年となっており、すべて省略可能です。以下の例では、2024年1月1日の午前0時をUTCタイムスタンプに変換する方法と、一部の引数のみを指定する方法を示しています。

<?php // 2025年1月1日 00:00:00 UTCのタイムスタンプを生成 $timestamp = gmmktime(0, 0, 0, 1, 1, 2025); echo $timestamp; ?>

出力結果

1735689600
<?php // 2025年12月25日 15:30:45 UTCのタイムスタンプを生成 $christmas = gmmktime(15, 30, 45, 12, 25); echo date('Y-m-d H:i:s', $christmas) . ' UTC'; ?>

出力結果(例)

2025-12-25 15:30:45 UTC

※実行した時間によって出力結果は変動します。このコードの場合は年が省略されているため、実行した時点の年になります。

実用例

以下では、gmmktime関数を実際の開発現場で活用できる8つの具体的なサンプルコードを紹介します。それぞれの例は異なる用途を想定しており、UTCタイムスタンプを使った日時処理の実践的な手法を学べます。各コード例には詳しい説明と実行結果を併記していますので、初心者の方でも理解しやすい内容となっています。

特定の日時からUTCタイムスタンプを生成

誕生日や記念日など、特定の日時をUTCタイムスタンプに変換する基本的な使用例です。データベースに保存する際の標準的な処理方法を示しています。

<?php // ネコの誕生日(2020年3月15日 10:30:00 UTC) $catBirthday = gmmktime(10, 30, 0, 3, 15, 2020); echo "ネコの誕生日: " . date('Y年m月d日 H時i分', $catBirthday); ?>

出力結果

ネコの誕生日: 2020年03月15日 10時30分

月末日の計算

翌月の0日を指定することで、指定した月の最終日を簡単に計算できる例になります。カレンダーアプリケーションなどで重宝する技術です。

<?php // 2025年2月の最終日を計算 $lastDay = gmmktime(0, 0, 0, 3, 0, 2025); echo "2025年2月の最終日: " . gmdate('Y年m月d日', $lastDay); ?>

出力結果

2025年2月の最終日: 2025年02月28日

週の開始日を求める

指定した日付から、その週の開始日(月曜日)を計算する例です。スケジュール管理システムでよく使われる処理パターンです。

<?php // 2025年1月15日の週の開始日(月曜日)を求める $date = gmmktime(0, 0, 0, 1, 15, 2025); $weekday = gmdate('w', $date); $monday = $date - (($weekday + 6) % 7) * 86400; echo "指定日の週の月曜日: " . gmdate('Y年m月d日', $monday); ?>

出力結果

指定日の週の月曜日: 2025年01月13日

年間の日数を計算

指定した年の1月1日と翌年の1月1日の差分から、その年の総日数を計算する方法です。うるう年の判定にも活用できる例になります。

<?php // 2025年の総日数を計算 $yearStart = gmmktime(0, 0, 0, 1, 1, 2025); $yearEnd = gmmktime(0, 0, 0, 1, 1, 2026); $days = ($yearEnd - $yearStart) / 86400; echo "2025年の日数: " . $days . "日"; ?>

出力結果

2025年の日数: 365日

夏時間を考慮した処理

UTCベースで処理することで、夏時間の影響を受けない安定した時刻計算を実現できます。国際的なシステムで重要な考慮点です。以下は例になります。

<?php // 夏時間に影響されない時刻比較 $summerTime = gmmktime(12, 0, 0, 7, 15, 2024); $winterTime = gmmktime(12, 0, 0, 12, 15, 2024); $diffHours = ($winterTime - $summerTime) / 3600; echo "クマの冬眠まで: " . round($diffHours) . "時間"; ?>

出力結果

クマの冬眠まで: 3672時間

APIレスポンスでの時刻統一

WebアプリケーションのAPI開発では、異なるタイムゾーンのクライアントに対して統一された時刻形式でデータを提供する必要があります。UTCタイムスタンプを使用することで、この問題を解決できます。以下は例になります。

<?php // APIレスポンス用のUTC時刻データ $eventTime = gmmktime(0, 0, 0, 6, 1, 2024); $response = array( 'animal' => 'ライオン', 'event' => '朝の狩り', 'timestamp' => $eventTime ); echo json_encode($response, JSON_UNESCAPED_UNICODE); ?>

出力結果

{"animal":"ライオン","event":"朝の狩り","timestamp":1717200000}

まとめ

gmmktime関数は、国際的なWebアプリケーション開発において欠かせない重要な機能です。UTCベースでの時刻処理により、世界中のユーザーが利用するシステムでも一貫性のあるデータ管理を実現できます。本記事で紹介した8つの実用例を通じて、さまざまな場面での活用方法を理解していただけたでしょう。

gmmktime関数の活躍する場面

  • 国際的なWebアプリケーションでの時刻データ統一
  • APIレスポンスにおけるタイムスタンプの標準化処理
  • ログファイルの時刻記録とサーバー環境の分離

重要なポイント

  • mktime関数との違いはUTCベースかローカル時間ベースか
  • 引数省略時は現在の日時要素が自動的に使用される
  • 夏時間の影響を受けずに安定した時刻計算が可能

これらの知識を活用して、より堅牢で国際対応のWebアプリケーションを開発してください。gmmktime関数をマスターすることで、時刻処理に関する多くの課題を効率的に解決できるようになります。

レベルを更に上げたい方はpaizaプログラミングスキルチェックへ

  1. paizaラーニングトップ
  2. リファレンス
  3. PHPのリファレンス記事一覧
  4. PHP gmmktime関数の使い方