時間関係の関数について
🕒 1. time()
- PHP組み込みの関数。
- **サーバーのローカル時刻(多くはUTC)**を返す。
- WordPressとは無関係。
🌏 2. current_time('timestamp')
- WordPressの「一般設定 > タイムゾーン」で指定された
**サイトのローカル時刻(例:日本時間)**を返す。 time()とズレることがある(例:日本の場合は +9時間)。
🧩 3. filemtime($file) の返す値
- OS(サーバー)のシステム時刻ベース(=
time()と同じ基準)。 - つまり、「サーバー時間(UTCなど)」で保存されている。
filemtime() はサーバー時間で記録されているので、
それと比較するなら time() を使うのが一致します。
|
1 |
if ((time() - $modified) < 600) { ... } // ✅ 正常 |
これを current_time('timestamp') にすると、
WordPressが日本時間(+9時間) に変換して返すため、
差分が「-9時間」となって「キャッシュ期限切れ」と誤判定されてしまうんです。
🧭 一言でまとめると
| 関数 | 基準 | 使いどころ |
|---|---|---|
time() | サーバーのシステム時間(UTCなど) | ファイル操作・キャッシュ・OSレベルの比較 |
current_time('timestamp') | WordPressのローカル設定時間 | 表示やログ出力(人間向け) |
自分が使いやすかった関数
時間関係は選択肢が多いので何か一つに決めた上でタイムゾーンを明確に宣言する。
↓は保存ファイルの時間判定に使用したタイムスタンプ関数(strtotime())。
|
1 2 3 4 5 |
$now = strtotime('now UTC'); $modified = filemtime($cache_file); $yesterday_20 = strtotime('yesterday 11:00:00 UTC'); //日本時間で昨日の20時 $today_20 = strtotime('today 11:00:00 UTC'); //日本時間で今日の20時 $tomorrow_20 = strtotime('tomorrow 11:00:00 UTC'); //日本時間で明日の20時 |
📅 strtotime()関数の概要
strtotime()(string to time)関数は、人間が読める形式の英語の日時を表す文字列を解析し、Unixタイムスタンプに変換するPHPの組み込み関数です。
- Unixタイムスタンプとは、1970年1月1日 00:00:00 UTC(協定世界時)から経過した秒数を表す整数値です。
この関数を使うと、特定の日付はもちろん、「1週間後」や「来週の月曜日」といった相対的な日時も簡単に計算できます。
⚙️ 構文
|
1 |
int strtotime(string $datetime_string, int $base_timestamp = null) |
| 引数 | 型 | 説明 |
$datetime_string | string | 解析したい日付/時刻を表す英語の文字列(例: "now", "next Monday", "2025-10-20") |
$base_timestamp | int | (オプション)相対的な日時を計算する際の基準となるUnixタイムスタンプ。指定しない場合は現在の時刻が基準になります。 |
| 戻り値 | int | 変換されたUnixタイムスタンプ。失敗した場合は**false**を返します。 |
💡 主な使い方と例
1. 特定の日付/時刻のタイムスタンプを取得する
特定の日付や時刻を直接指定して、そのタイムスタンプを取得できます。
|
1 2 3 4 5 6 |
// 例:2025年10月20日 15時30分00秒 のタイムスタンプを取得 $timestamp = strtotime("2025-10-20 15:30:00"); // Unixタイムスタンプを読みやすい形式に変換するには `date()` 関数と組み合わせます echo date('Y/m/d H:i:s', $timestamp); // 出力例: 2025/10/20 15:30:00 |
2. 相対的な日時を計算する (最も便利!)
現在時刻を基準に、「何日後」「何週間前」といった相対的な日時を計算するのに非常に役立ちます。
| 文字列の例 | 意味 |
"now" | 現在時刻 |
"tomorrow" | 明日 |
"yesterday" | 昨日 |
"+1 day" | 1日後 |
"-2 weeks" | 2週間前 |
"+3 months" | 3ヶ月後 |
"next Monday" | 次の月曜日 |
"last Friday" | 前の金曜日 |
"+1 week 2 days 4 hours" | 1週間と2日と4時間後 |
サンプルコード
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// 1週間後の日付を取得 $next_week = strtotime("+1 week"); echo "1週間後: " . date('Y/m/d', $next_week) . "\n"; // 3ヶ月前の日付を取得 $three_months_ago = strtotime("-3 month"); echo "3ヶ月前: " . date('Y/m/d', $three_months_ago) . "\n"; // 次の土曜日の日付を取得 $next_saturday = strtotime("next Saturday"); echo "次の土曜日: " . date('Y/m/d', $next_saturday) . "\n"; // 基準日を「2025年1月1日」とする $base_date = strtotime("2025-01-01"); // 2025年1月1日から「100日後」の日付を取得 $hundred_days_later = strtotime("+100 day", $base_date); echo "基準日: " . date('Y/m/d', $base_date) . "\n"; echo "100日後: " . date('Y/m/d', $hundred_days_later) . "\n"; // 出力例: 基準日: 2025/01/01 // 100日後: 2025/04/11 |
⚠️ 注意点
strtotime()が返すのは**Unixタイムスタンプ(秒数)**であり、この値にはタイムゾーンの情報は含まれていません。- より複雑な日付・時刻の操作や、厳密なタイムゾーンの扱いが必要な場合は、
DateTimeImmutableクラスを使用することがPHPの公式ドキュメントでも推奨されています。 - 解析できる文字列は英語の日時形式に基づいています。日本語の「来週」などでは機能しません。
strtotime()は、簡単な日付の計算や変換を行う上で非常に強力で便利な関数です。

コメント