PHPで時間操作!strtotime関数の完全ガイドとその10の使い方

PHPのstrtotime関数について解説する記事のイメージ画像 PHP
この記事は約7分で読めます。

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

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

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

基本的な知識があればサンプルコードを活用して機能追加、目的を達成できるように作ってあります。

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

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

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

はじめに

時間と日付は、ウェブサイトやアプリケーションを作成する際に頻繁に遭遇するテーマです。

しかし、時間や日付の操作は一見すると難しそうなイメージがあるかもしれません。

そこで、この記事ではPHPの関数である「strtotime」を使った時間操作について、初心者でも理解できるように詳しく解説します。

この記事を読むことで、時間操作を自在に扱えるようになるでしょう。

●strtotimeとは

「strtotime」はPHPで提供されている関数の一つで、英語形式の日付をUnixタイムスタンプに変換する役割があります。

Unixタイムスタンプとは、1970年1月1日0時0分0秒(UTC)からの経過秒数を指します。

つまり、「strtotime」関数を使うと、様々な形式の日付や時間表現を、プログラムで操作しやすい数値に変換することができます。

●基本的な使い方

「strtotime」関数の基本的な使い方を見ていきましょう。

まずは具体的な日付の変換から始めます。

○例1:具体的な日付を変換する

下記のコードでは、”2023-06-09″という日付をUnixタイムスタンプに変換しています。

<?php
$timestamp = strtotime("2023-06-09");
echo $timestamp;
?>

このコードを実行すると、”2023-06-09″という日付が1970年1月1日から何秒経過した日付なのか、その秒数が出力されます。

次に、相対的な日付表現を変換してみましょう。

○例2:相対的な日付表現を変換する

“next Monday”や”2 days ago”といった相対的な日付表現もstrtotime関数で変換することができます。

<?php
$timestamp = strtotime("next Monday");
echo $timestamp;
?>

このコードを実行すると、「次の月曜日」が1970年1月1日から何秒経過した日付なのか、その秒数が出力されます。

●応用的な使い方

次に、「strtotime」関数を使った応用的な使い方をいくつか紹介します。

○例3:時間計算を行う

「strtotime」関数は時間の計算にも利用できます。

<?php
$timestamp = strtotime("+72 hours");
echo $timestamp;
?>

このコードを実行すると、現在時間から72時間後の時刻が1970年1月1日から何秒経過した時間なのか、その秒数が出力されます。

○例4:特定の曜日を取得する

次の日や前の日だけでなく、特定の曜日も取得することが可能です。

<?php
$timestamp = strtotime("next Monday");
echo date('Y-m-d', $timestamp);
?>

このコードを実行すると、今日から見て次の月曜日の日付が「YYYY-MM-DD」の形式で出力されます。

○例5:月の最初の日を取得する

同様に、「strtotime」関数を使って月の最初の日を取得することもできます。

<?php
$timestamp = strtotime("first day of this month");
echo date('Y-m-d', $timestamp);
?>

このコードを実行すると、今月の最初の日の日付が「YYYY-MM-DD」の形式で出力されます。

○例6:月の最後の日を取得する

同じように、現在の月の最後の日も取得できます。

<?php
$timestamp = strtotime("last day of this month");
echo date('Y-m-d', $timestamp);
?>

このコードを実行すると、今月の最後の日の日付が「YYYY-MM-DD」の形式で出力されます。

○例7:日付の範囲を生成する

「strtotime」関数は、指定した日付範囲を生成するのにも使用できます。

<?php
for ($i = 0; $i < 7; $i++) {
    $timestamp = strtotime("+$i day");
    echo date('Y-m-d', $timestamp);
    echo "\n";
}
?>

このコードを実行すると、今日から始まる7日間の日付が連続して「YYYY-MM-DD」の形式で出力されます。

○例8:日付の比較を行う

また、strtotime関数は日付の比較にも利用できます。

<?php
$date1 = strtotime("2023-06-09");
$date2 = strtotime("2023-06-10");

if ($date1 < $date2) {
    echo "date1 is earlier than date2";
} else if ($date1 == $date2) {
    echo "date1 is the same as date2";
} else {
    echo "date1 is later than date2";
}
?>

このコードを実行すると、date1がdate2より早い、同じ、あるいは遅いのかをテキストで出力します。

○例9:現在からの経過時間を計算する

時間の操作では、現在からの経過時間を計算することも頻繁に行われます。

<?php
$past = strtotime("2022-01-01 00:00:00");
$now = strtotime("now");
$diff = $now - $past;
$daysPassed = floor($diff / (60 * 60 * 24));
echo $daysPassed;
?>

このコードでは、「2022-01-01 00:00:00」から現在までの経過時間を計算し、その結果を日数として出力しています。

○例10:特定の時間にアラートを設定する

また、指定した時間が来たら何かを実行する、といった一定のタイミングでアラートを設定することも可能です。

<?php
$alert_time = strtotime("12:00:00");
while (true) {
    $now = strtotime(date("H:i:s"));
    if ($now >= $alert_time) {
        echo "It's time!";
        break;
    }
}
?>

上記のコードでは、現在時刻が午前12時になったら「It’s time!」と出力します。

ただし、このコードは無限ループを含んでいるため、サーバーやPCに負荷をかける可能性があるので注意が必要です。

●注意点と対処法

「strtotime」関数は便利ですが、注意点もあります。

詳しく紹介していきます。

○文字列のフォーマットに注意する

「strtotime」関数は様々な文字列形式を受け入れますが、解釈できないフォーマットの場合はfalseを返します。

この場合、エラーハンドリングを行って適切に対応することが重要です。

○タイムゾーンの影響を理解する

また、「strtotime」関数はサーバーのタイムゾーン設定に依存します。

この設定が意図したものと異なる場合、誤った結果が得られる可能性があります。

必要に応じてタイムゾーンを設定することが重要です。

●よくあるエラーとその対処法

「strtotime」関数を使用する際によくあるエラーとその対処法をいくつか紹介します。

○解釈できない日付形式を入力した場合

「strtotime」関数は、一部の日付形式を解釈できません。

たとえば、「20230101」のような形式は解釈できません。

「YYYY-MM-DD」または「YYYY/MM/DD」のような形式を使用することを推奨します。

○1970年以前または2038年以降の日付を扱おうとした場合

32ビットのシステムでは、「strtotime」関数は1970年1月1日以前または2038年1月19日以降の日付を扱うことができません。

これらの範囲外の日付を扱う必要がある場合は、64ビットのシステムを使用するか、「DateTime」クラスを使用することを検討してください。

●カスタマイズ方法

「strtotime」関数は高い柔軟性を持っているため、多くのカスタマイズが可能です。

具体的な形式や組み合わせはPHPの公式ドキュメントを参照してください。

さらに深い理解と、より具体的な時間操作の要件に対応するためには、「DateTime」クラスとそのメソッドを使用することを検討してみてください。

まとめ

「strtotime」関数は、時間と日付を扱うための非常に強力なツールです。

上記の例はその一部に過ぎませんが、これらの基本的な使い方を理解することで、より高度な時間操作を実行することが可能になります。

注意点やエラーハンドリングについて理解し、適切に対応することで、「strtotime」関数を安全に使用することができます。

この記事が、「strtotime」関数を理解し、使いこなす一助となれば幸いです。