PHPで日時を操作する!5つの基本ステップと10の鮮やかな応用例

PHPで日時を扱う方法を紹介する記事のサムネイルPHP
この記事は約10分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

日時は、PHPでのプログラミングでは頻繁に取り扱う要素の一つです。

しかし、「日時のフォーマットが理解できない」、「特定の日時の取得方法がわからない」、「日時の比較や計算が難しい」といった問題に直面することも少なくありません。

この記事を読むことで、これらの問題を解決し、PHPで日時を自在に扱えるようになります。

基本的な日時の操作から応用的な使用例まで、詳しく、わかりやすく解説します。

●PHPで日時を扱うための基本

PHPで日時を扱うためには、まず基本的なフォーマットと操作方法を理解することが必要です。

○日付と時間の基本的なフォーマット

PHPで日時を扱う際には、「年-月-日 時:分:秒」の形式が一般的です。これをISO 8601形式と言います。

例えば、「2023-05-18 14:30:00」のように表現します。

○現在の日時を取得する

PHPで現在の日時を取得する方法は簡単です。

date関数を使用して、現在の日時をISO 8601形式で取得できます。

<?php
echo date('Y-m-d H:i:s');  // 現在の日時を表示
?>

このコードはdate関数を使って現在の日時を取得しています。

この例では、年(Y)、月(m)、日(d)、時(H)、分(i)、秒(s)の形式で日時を表示しています。

○特定の日時を取得する

特定の日時を表現するには、文字列から日時を生成するstrtotime関数が便利です。

<?php
$specific_datetime = strtotime('2023-05-18 14:30:00');
echo date('Y-m-d H:i:s', $specific_datetime);  // 特定の日時を表示
?>

このコードではstrtotime関数を使って特定の日時を表現しています。

この例では、「2023-05-18 14:30:00」を日時として指定しています。

○日時を比較する

日時の比較もstrtotime関数を使用します。

特定の日時が現在より前か後かを比較できます。

<?php
$specific_datetime = strtotime('2023-05-18 14:30:00');
if (time() < $specific_datetime) {
    echo "指定した日時は未来です。";
} else {
    echo "指定した日時は過去です。";
}
?>

このコードではtime関数とstrtotime関数を使って現在の日時と特定の日時を比較しています。

この例では、「2023-05-18 14:30:00」が現在の日時より前か後かを判断しています。

○日時を計算する

日時の計算にもstrtotime関数を活用します。

特定の日時に対して時間を足したり引いたりすることが可能です。

<?php
$specific_datetime = strtotime('2023-05-18 14:30:00');
$one_day_later = strtotime('+1 day', $specific_datetime);
echo date('Y-m-d H:i:s', $one_day_later);  // 1日後の日時を表示
?>

このコードではstrtotime関数を使って日時に1日を足しています。

この例では、「2023-05-18 14:30:00」に1日を加算しています。

●PHPで日時を扱うための応用例とサンプルコード

基本的な日時の取り扱いを学んだところで、具体的な応用例とそれらを実装するためのサンプルコードを紹介します。

○1つ目の応用例:特定の日付までのカウントダウン

特定の日付までのカウントダウンを作成するには、現在の日時と目標の日時の差を計算します。

<?php
$target_datetime = strtotime('2023-12-31 00:00:00');
$remaining_seconds = $target_datetime - time();
echo "あと" . floor($remaining_seconds / (60 * 60 * 24)) . "日です。";
?>

このコードではstrtotime関数とtime関数を用いて特定の日付までの残りの日数を計算しています。

この例では「2023-12-31 00:00:00」までの残り日数を表示しています。

○2つ目の応用例:生年月日から現在の年齢を計算

生年月日から現在の年齢を算出するには、次のようなコードを使用します。

<?php
$birthday = strtotime('2000-01-01');
$age = floor((time() - $birthday) / (60 * 60 * 24 * 365));
echo "あなたの年齢は" . $age . "歳です。";
?>

このコードではstrtotime関数とtime関数を使って現在の年齢を計算しています。

この例では2000年1月1日生まれの年齢を計算して表示しています。

○3つ目の応用例:特定の期間内での作業日数を計算

特定の期間内での作業日数(平日)を計算するには、開始日から終了日までの日数を算出し、その間に含まれる土日の日数を減算します。

ここでは、土日を除いた日数の計算例を示します。

<?php
$start_date = strtotime('2023-05-01');
$end_date = strtotime('2023-05-31');
$working_days = 0;
for ($date = $start_date; $date <= $end_date; $date = strtotime('+1 day', $date)) {
    if (date('w', $date) != 0 && date('w', $date) != 6) {
        $working_days++;
    }
}
echo "作業日数は" . $working_days . "日です。";
?>

このコードでは、strtotime関数を使って特定の期間内の作業日数を計算しています。

この例では、2023年5月1日から2023年5月31日までの期間の作業日数を計算しています。

日曜日と土曜日(date('w', $date)が0または6)を除いた日数を作業日数としています。

○4つ目の応用例:曜日の計算

特定の日付の曜日を計算するには、date関数とwというパラメータを使用します。

<?php
$date = strtotime('2023-05-18');
$day_of_week = date('w', $date);
$days = array('日', '月', '火', '水', '木', '金', '土');
echo '2023年5月18日は' . $days[$day_of_week] . '曜日です。';
?>

このコードではdate関数を使用して特定の日付の曜日を算出しています。

この例では2023年5月18日の曜日を表示しています。

○5つ目の応用例:次の特定の曜日までの日数を計算

次の特定の曜日までの日数を計算するには、次のようにします。

<?php
$target_day_of_week = 5;  // 金曜日をターゲットに設定
$current_day_of_week = date('w');
$days_until_target = ($target_day_of_week - $current_day_of_week + 7) % 7;
echo '次の金曜日まであと' . $days_until_target . '日です。';
?>

このコードでは、現在の曜日と目指す曜日との差を計算して次の金曜日までの日数を表示しています。

○6つ目の応用例:特定の日付の週番号を取得

特定の日付がその年の何週目にあたるかを計算するには、date関数とWというパラメータを使用します。

<?php
$date = strtotime('2023-05-18');
$week_number = date('W', $date);
echo '2023年5月18日はその年の' . $week_number . '週目です。';
?>

このコードではdate関数を使用して特定の日付がその年の何週目にあたるかを計算しています。

この例では2023年5月18日がその年の何週目にあたるかを表示しています。

○7つ目の応用例:特定の月の日数を取得

特定の月の日数を知りたい場合は、cal_days_in_month関数を使用することで計算できます。

<?php
$year = 2023;
$month = 5; 
$days = cal_days_in_month(CAL_GREGORIAN, $month, $year);
echo '2023年5月は' . $days . '日あります。';
?>

このコードではcal_days_in_month関数を使って、2023年5月の日数を取得しています。

これにより、指定した月が何日まであるかを表示しています。

○8つ目の応用例:日付のフォーマット変換

日付のフォーマットを変換するには、date関数を使用します。

<?php
$date = strtotime('2023-05-18');
$formatted_date = date('Y年m月d日', $date);
echo 'フォーマット変換後の日付: ' . $formatted_date;
?>

このコードでは、date関数を用いて2023年5月18日という日付を’Y年m月d日’という形式に変換しています。

○9つ目の応用例:タイムスタンプの利用

タイムスタンプはUNIX時刻とも呼ばれ、1970年1月1日00:00:00 UTCからの経過秒数を表します。

次の例は現在のタイムスタンプを取得する方法です。

<?php
$timestamp = time();
echo '現在のタイムスタンプ: ' . $timestamp;
?>

このコードではtime関数を使用し、現在のタイムスタンプを取得しています。

○10つ目の応用例:日時オブジェクトの扱い

PHPでは日時をオブジェクトとして扱うことが可能で、そのオブジェクトを通じて様々な日時関連の操作が可能です。

次の例では、DateTimeクラスを使用して日時オブジェクトを生成し、formatメソッドで日時を整形して表示します。

<?php
$datetime = new DateTime('2023-05-18');
echo $datetime->format('Y年m月d日 H時i分s秒');
?>

このコードではDateTimeクラスを使って2023年5月18日の日時オブジェクトを生成し、そのオブジェクトのformatメソッドを使って日時を’Y年m月d日 H時i分s秒’という形式で表示しています。

●PHPで日時を扱う際の注意点と対処法

日時を扱う際には、時間帯の問題や、閏秒、閏年などの時間の特性を理解しておくことが重要です。

特にPHPではデフォルトの時間帯が設定されていない場合があるため、date_default_timezone_set関数を使って明示的に時間帯を設定することを推奨します。

<?php
date_default_timezone_set('Asia/Tokyo');
echo date('Y-m-d H:i:s');
?>

このコードではdate_default_timezone_set関数を使って日本の時間帯を設定し、その後現在の日時を表示しています。

また、PHPのバージョンによっては、2038年問題に注意が必要です。

これは32ビットのUNIXタイムスタンプが2048年以降の日付を表現できない問題で、これを回避するには64ビットのシステムを使用するか、DateTimeクラスを使用すると良いでしょう。

●日時のカスタマイズ方法

PHPでは、date関数を用いて日時のフォーマットを自由にカスタマイズできます。

よく使われる書式の一部を紹介します。

  • Y:4桁の年を表す。
  • m:2桁の月を表す。
  • d:2桁の日を表す。
  • H:2桁の時間(24時間制)を表す。
  • i:2桁の分を表す。
  • s:2桁の秒を表す。

これらを組み合わせて日時のフォーマットを作ることができます。

まとめ

この記事を参考に、日時の取扱いについて理解を深め、自分のプロジェクトに応用してみてください。

日時の扱いはプログラミングにおいて頻繁に遭遇する課題ですので、しっかりと理解しておくと大変役立つはずです。