【PHP8.x】getdate関数の使い方
getdate関数は、指定されたタイムスタンプに関する日付と時刻の情報を、詳細な要素に分解した連想配列として取得する関数です。引数にUnixタイムスタンプを指定すると、その時刻に対応する情報が返されます。引数を省略した場合は、関数が呼び出された時点の現在の日時が自動的に使用されます。この関数が返す連想配列には、秒('seconds')、分('minutes')、時('hours')、日('mday')、月('mon')、年('year')といった数値情報が含まれます。さらに、曜日の数値表現('wday'、0が日曜日)や、その年における何日目かを示す数値('yday')も取得できます。加えて、曜日の完全な名前('weekday'、例: "Monday")や月の完全な名前('month'、例: "January")といった文字列形式の情報も提供されるため、表示用にそのまま利用することも可能です。また、キー'0'には、元となったUnixタイムスタンプの値そのものが格納されます。このため、日付や時刻の特定の部分を個別に取り出して処理したい場合に非常に便利な関数です。
基本的な使い方
構文(syntax)
getdate(?int $timestamp = null): array
引数(parameters)
?int $timestamp = null
- ?int $timestamp = null: 情報を取得したい日付・時刻を表すUNIXタイムスタンプ。指定しない場合は、現在のローカル時刻が使用されます。
戻り値(return)
array|false
getdate 関数は、指定されたタイムスタンプ(省略した場合は現在の時刻)に対応する日付と時刻の情報を連想配列で返します。タイムスタンプが無効な場合は false を返します。
サンプルコード
getdate()とdate()の違いを比較する
<?php
/**
* getdate() と date() の違いを比較するための関数
*
* getdate() は日付/時刻の各要素を連想配列として返します。
* 一方、date() は指定されたフォーマットに従って整形された文字列を返します。
* このサンプルでは、両方の関数を引数なしで呼び出し、現在の時刻を基にした
* 返り値の構造と型の違いを示します。
*/
function compareGetdateAndDate(): void
{
// 1. getdate(): 日付/時刻の情報を「連想配列」で取得します。
// 'year', 'mon', 'mday' などのキーを使って、特定の日付要素にアクセスできます。
echo '--- getdate() の実行結果 (戻り値: array) ---' . PHP_EOL;
$dateInfoArray = getdate();
print_r($dateInfoArray);
echo PHP_EOL;
// 2. date(): 日付/時刻を、指定した書式の「文字列」で取得します。
// 'Y-m-d H:i:s' のようなフォーマット文字で、出力形式を自由に定義できます。
echo '--- date() の実行結果 (戻り値: string) ---' . PHP_EOL;
$formattedDateString = date('Y-m-d H:i:s');
echo $formattedDateString . PHP_EOL;
// getdate()で取得した配列の要素を使って、date()と同様の文字列を組み立てる例
echo PHP_EOL . '--- getdate() の配列から文字列を組み立てる例 ---' . PHP_EOL;
printf(
'%04d-%02d-%02d %02d:%02d:%02d',
$dateInfoArray['year'],
$dateInfoArray['mon'],
$dateInfoArray['mday'],
$dateInfoArray['hours'],
$dateInfoArray['minutes'],
$dateInfoArray['seconds']
);
echo PHP_EOL;
}
// 関数を実行して、2つの関数の出力の違いを確認します。
compareGetdateAndDate();
PHPのgetdate()
関数とdate()
関数は、どちらも日付や時刻を扱いますが、その目的と戻り値の形式に大きな違いがあります。
getdate()
関数は、日付と時刻の各要素を個別に格納した「連想配列」を返します。引数にタイムスタンプ(1970年からの経過秒数)を指定できますが、省略した場合は現在の時刻が使用されます。返される配列には 'year'(年)、'mon'(月)、'mday'(日)といったキーが含まれており、特定の日付要素を個別に取り出して計算などに使いたい場合に便利です。
一方、date()
関数は、指定した書式(フォーマット)に従って整形された一つの「文字列」を返します。例えば、'Y-m-d H:i:s' のようなフォーマット文字を使うことで、日付や時刻を希望の形式で出力できます。主にログの記録や画面表示など、整形済みの文字列がそのまま必要な場面で利用されます。
結論として、日付情報を部品の集まりとして配列で取得したい場合はgetdate()
を、決まった書式の文字列として取得したい場合はdate()
を使用するという明確な使い分けがあります。
getdate()
は日付の各要素を連想配列で返すため、echo
で直接表示できません。print_r()
などを使って内容を確認する必要があります。一方、date()
は指定した書式の文字列を返すので、そのまま画面表示やログ出力に使えます。両方の関数はサーバーのタイムゾーン設定に影響されるため、意図しない時刻が表示される場合はdate_default_timezone_set()
の設定を確認してください。プログラム内で年や月といった個別の数値データを使って計算したい場合はgetdate()
が、決まった形式の日付文字列が欲しい場合はdate()
が適しています。
PHP getdateを文字列に変換する
<?php
/**
* 現在の日時を getdate() で取得し、文字列に変換して返します。
*
* この関数は、getdate() が返す連想配列から年月日時分秒の値を取り出し、
* 人間が読みやすい "YYYY-MM-DD HH:MM:SS" 形式の文字列を生成します。
*
* @return string フォーマットされた日時文字列。
*/
function getCurrentDateAsString(): string
{
// getdate() を引数なしで呼び出し、現在のタイムスタンプに基づく日時情報を連想配列で取得します。
$dateInfo = getdate();
// 取得した連想配列の各要素を sprintf() を使って特定のフォーマットの文字列に組み立てます。
// %04d: 4桁の整数で、足りない桁は0で埋める (年)
// %02d: 2桁の整数で、足りない桁は0で埋める (月、日、時、分、秒)
return sprintf(
'%04d-%02d-%02d %02d:%02d:%02d',
$dateInfo['year'], // 年
$dateInfo['mon'], // 月
$dateInfo['mday'], // 日
$dateInfo['hours'], // 時
$dateInfo['minutes'], // 分
$dateInfo['seconds'] // 秒
);
}
// 関数を実行し、生成された日時文字列を出力します。
// PHP_EOL はOSに応じた改行コードを出力するための定義済み定数です。
echo getCurrentDateAsString() . PHP_EOL;
このPHPコードは、getdate()
関数を使って現在の日時情報を取得し、それを人間が読みやすい「YYYY-MM-DD HH:MM:SS」形式の文字列に変換する例です。
getdate()
は、日時情報を要素ごとに分解した連想配列として取得するための関数です。引数としてUNIXタイムスタンプ(1970年1月1日からの経過秒数を表す整数)を指定できますが、省略した場合は現在のシステム時刻が使用されます。関数の戻り値は、成功時には'year'(年)、'mon'(月)、'mday'(日)などのキーを持つ連想配列となり、タイムスタンプが無効な場合はfalse
を返します。
サンプルコード内のgetCurrentDateAsString
関数では、まず引数なしでgetdate()
を呼び出し、現在の時刻情報を連想配列$dateInfo
に格納します。次にsprintf()
関数を使い、この連想配列から年・月・日・時・分・秒の値を順番に取り出して、指定された書式の文字列を組み立てています。例えば%04d
は4桁の整数、%02d
は2桁の整数として表示し、桁数が足りない場合は先頭を0で埋めるという指定です。
最後に、作成した関数を呼び出し、その戻り値である整形された日時文字列を、改行コード(PHP_EOL
)と共に画面に出力しています。
getdate()
関数は、サーバーに設定されたデフォルトのタイムゾーンに基づいて日時を返します。意図しない時刻になるのを防ぐため、date_default_timezone_set()
関数で「Asia/Tokyo」のようにタイムゾーンを明示的に指定することが重要です。また、この関数は失敗するとfalse
を返す可能性があるため、戻り値が配列であることを確認してから各要素にアクセスすると、予期せぬエラーを防げます。単に日時を特定の書式の文字列に変換したい場合は、より簡潔なdate()
関数や、高機能なDateTime
クラスの利用も検討しましょう。getdate()
は、曜日の名前や年間通算日など、日付の各要素を個別に扱いたい場合に特に便利な関数です。