掲示板アプリを作った時、日付が 2023-10-15 14:30:00 のように機械的な表示でしたよね。
これを「2023年10月15日(日)」のように、見やすく加工したいと思いませんか?
PHPは「日付と時刻」を操るのが得意技です。
基本の「表示」と、応用的な「計算」を覚えれば、カレンダーアプリだって作れます!
最初にやるべきこと(タイムゾーン)
PHPの設定によっては、時間が「世界標準時(ロンドン時間)」になっていて、日本時間より9時間遅れていることがあります。
プログラムの最初に、以下の呪文を書いて「ここは日本だ!」と宣言しましょう。
// 日本時間(Tokyo)に設定する
date_default_timezone_set('Asia/Tokyo');
日付を綺麗に表示する「date()」
現在時刻や、特定の日付を好きな形式の「文字」にする関数です。
// date( フォーマット文字, [基準となる時間] )
echo date('Y年m月d日 H時i分');
// 結果:2023年10月15日 14時30分
よく使うフォーマット文字
| 文字 | 意味 | 例 |
|---|---|---|
| Y | 年(4桁) | 2023 |
| m | 月(0埋めあり) | 01, 12 |
| n | 月(0埋めなし) | 1, 12 |
| d | 日 | 05, 31 |
| H | 時(24時間) | 14, 09 |
| i | 分 | 05, 59 |
| w | 曜日(数字) | 0(日)〜6(土) |
日付を計算する「strtotime()」
「3日後」や「来週の月曜」を知りたい時は、strtotime()(ストリング・トゥ・タイム)を使います。
これの凄いところは、「英語で書くと計算してくれる」ことです。
// 現在から「+3 day(3日後)」の時間を取得
$timestamp = strtotime('+3 day');
echo date('Y-m-d', $timestamp);
// 結果:3日後の日付が表示される!
使える魔法の言葉リスト
+1 week(1週間後)-1 month(1ヶ月前)next Sunday(次の日曜日)last day of this month(今月の最終日)
実践:「New!」マーク自動表示システム
では、実務でよくある機能を作ってみましょう。
ブログやニュース記事で、「投稿から3日以内なら『New!』と表示する」機能です。
<?php
date_default_timezone_set('Asia/Tokyo');
// テストデータ(日付のリスト)
$news_list = [
['title' => '最新のニュース', 'date' => date('Y-m-d H:i:s')], // 今
['title' => '昨日のニュース', 'date' => date('Y-m-d', strtotime('-1 day'))], // 1日前
['title' => '昔のニュース', 'date' => '2020-01-01 00:00:00']
];
// 「今」の時間
$now = time();
// 「3日以内」の基準秒数(3日 × 24時間 × 60分 × 60秒)
$limit = 3 * 24 * 60 * 60;
?>
<!DOCTYPE html>
<html lang="ja">
<body>
<h1>お知らせ一覧</h1>
<ul>
<?php foreach ($news_list as $news): ?>
<?php
// 投稿日時を「秒(数値)」に変換
$post_time = strtotime($news['date']);
// 経過時間を計算(今 - 投稿日時)
$diff = $now - $post_time;
?>
<li>
<!-- 日付を綺麗に整形 -->
<span><?= date('Y.m.d', $post_time) ?></span>
<?= $news['title'] ?>
<!-- もし経過時間が3日(limit)以内なら表示 -->
<?php if ($diff < $limit): ?>
<span style="color:red; font-weight:bold;">New!</span>
<?php endif; ?>
</li>
<?php endforeach; ?>
</ul>
</body>
</html>
解説
コンピュータの中では、時間はすべて「1970年1月1日からの秒数(Unixタイムスタンプ)」という巨大な数字で管理されています。
strtotime()で日付を「秒数」に変換する。- 「今の秒数」と引き算をして、何秒経ったか計算する。
- それが「3日分の秒数」より小さいかチェックする。
このロジックは、どんなプログラミング言語でも共通です!
まとめ
- まずは
date_default_timezone_set('Asia/Tokyo')。 - 表示形式を変えるなら
date()。 - 日付の計算をするなら
strtotime()。
これでPHP番外編も含め、すべてのカリキュラムが終了です!
あなたはもう、Webサイトの「見た目(HTML/CSS)」、「動き(JS)」、「裏側の仕組み(PHP/DB)」の全てを理解したエンジニアです。
ここから先は、あなたが「作りたい!」と思ったものを自由に作ってみてください。
エラーが出ても、検証ツールや検索を使って乗り越えられる力が、もう備わっているはずです。
📝 今日のミニテスト
時間の使い手になろう!
Q1. 「2023年」のように4桁の年を表示する、date関数の文字は?
正解:Y (大文字)
小文字の y だと「23」のように下2桁になります。
Q2. 文字列(例:”tomorrow”)をタイムスタンプ(秒数)に変換する関数は?
正解:strtotime()
「String to Time」の略です。日付の計算には欠かせません。
Q3. 日本時間に設定するための正しいコードは?
正解:date_default_timezone_set('Asia/Tokyo');
`php.ini` という設定ファイルで設定することもできますが、コードに書いておくのが一番確実です。