strtotime
英文形式の日付を Unix タイムスタンプに変換する
説明
intfalse strtotime(string $datetime
, intnull $baseTimestamp
= null
)
この関数は英語の書式での日付を含む文字列が指定されることを期待しており、
その書式を Unix タイムスタンプ (1970 年 1 月 1 日 00:00:00 UTC からの経過秒数) に変換しようとします。
baseTimestamp
が指定された場合は、そのタイムスタンプを基準とした相対時刻のタイムスタンプに変換します。
baseTimestamp
が指定されていない場合は、現在時刻を基準とした相対時刻のタイムスタンプに変換します。
パースされる日付を含む文字列の書式は、
サポートする日付と時刻の書式 で定義されており、考慮すべき微妙な点がいくつかあります。
サポートする日付と時刻の書式について、読んでおくことを強く推奨します。
警告
この関数が返す Unixタイムスタンプ は、タイムゾーンの情報を含んでいません。
日付/時刻の情報を含めて計算するには、
より多くの機能がある DateTimeImmutable を使うべきです。
この関数の各パラメータでは、パラメータ内でタイムゾーンを指定しない限りはデフォルトのタイムゾーンを使います。
意図的にそうする場合は別として、パラメータごとにタイムゾーンを変えてしまったりしないように気をつけましょう。
デフォルトのタイムゾーンを定義する方法については
date_default_timezone_get を参照ください。
パラメータ
-
datetime
-
日付/時刻 文字列。有効な書式については 日付と時刻の書式 で説明しています。
-
baseTimestamp
-
返される値を計算するために使用されるタイムスタンプ。
戻り値
成功時はタイムスタンプ、そうでなければ false
を返します。
エラー / 例外
すべての日付/時刻関数は、
有効なタイムゾーンが設定されていない場合に E_WARNING
を発生させます。
date_default_timezone_set も参照ください。
例
例1 strtotime の例
<?php
echo strtotime("now"), "\n";
echo strtotime("10 September 2000"), "\n";
echo strtotime("+1 day"), "\n";
echo strtotime("+1 week"), "\n";
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo strtotime("next Thursday"), "\n";
echo strtotime("last Monday"), "\n";
?>
例2 失敗のチェック
<?php
$str = 'Not Good';
if (($timestamp = strtotime($str)) === false) {
echo "The string ($str) is bogus";
} else {
echo "$str == " . date('l dS \o\f F Y h:i:s A', $timestamp);
}
?>
注意
注意:
"相対的な" 日付とは、
日付/時刻の一部の情報が与えられていないということでもあります。
与えられていない情報は baseTimestamp
から取得されます。
つまり、2022年5月31日 (31st of May 2022) に
strtotime('February')
を実行すると、
31 February 2022
と解釈されて日付がオーバーフローし、
3 March
になります(うるう年の場合、2 March
になります)。
strtotime('1 February')
や
strtotime('first day of February')
を使うことで、この問題は回避できます。
注意:
年を 2 桁の数値で指定した場合、その値が 00-69 なら 2000-2069 に、
70-99 なら 1970-1999 にそれぞれ変換されます。
32 ビットシステム上での相違点 (2038-01-19 03:14:07
までの日付しか表せない) については以下の注意を参照ください。
注意:
タイムスタンプの有効な範囲は、通常、Fri, 13 Dec 1901 20:45:54
UTC から Tue, 19 Jan 2038 03:14:07 UTC までです (これらは、32
ビット符号付整数の最大及び最小に一致します)。
64 ビット版の PHP では、タイムスタンプの有効範囲は事実上無制限です。
というのも、64 ビットでは過去側も未来側も約 2930 億年を表せるからです。
注意:
この関数を使って日付の足し算や引き算を行うことはおすすめできません。
DateTime::add や
DateTime::sub を使いましょう。
参考
- DateTimeImmutable
- DateTimeImmutable::createFromFormat
- 日付と時刻の書式
- checkdate
- strptime