英文形式の日付を Unix タイムスタンプに変換する

# strtotime

(PHP 4, PHP 5, PHP 7)

strtotime — 英文形式の日付を Unix タイムスタンプに変換する

### 説明

strtotime ( string `$time` [, int `$now` = time() ] ) : int

この関数は英語の書式での日付を含む文字列が指定されることを期待しており、 `now` で与えられたその形式から Unix タイムスタンプ (1970 年 1 月 1 日 00:00:00 UTC からの経過秒数) への変換を試みます。 `now` が指定されていない場合は現在日時に変換します。

この関数の各パラメータでは、パラメータ内でタイムゾーンを指定しない限りはデフォルトのタイムゾーンを使います。 意図的にそうする場合は別として、パラメータごとにタイムゾーンを変えてしまったりしないように気をつけましょう。 デフォルトのタイムゾーンを定義する方法については date_default_timezone_get() を参照ください。

### パラメータ

`time`

  日付/時刻 文字列。有効な書式については 日付と時刻の書式 で説明しています。

`now`

  返される値を計算するために使用されるタイムスタンプ。

### 返り値

成功時はタイムスタンプ、そうでなければ `FALSE` を返します。 PHP 5.1.0 以前ではこの関数は失敗時に -1 を返します。

### エラー / 例外

すべての日付/時刻関数は、 有効なタイムゾーンが設定されていない場合に `E_NOTICE` を発生させます。また、システム設定のタイムゾーンあるいは環境変数 TZ を使用した場合には `E_STRICT` あるいは `E_WARNING` を発生させます。 date_default_timezone_set() も参照ください。

### 変更履歴

バージョン | 説明
--- | ---
5.3.0 | PHP 5.3.0 より前のバージョンでは、 strtotime() の引数 `time` に this week や previous week、 last week、next week を指定すると、現在日時から数えて 7 日単位という解釈になっていました。 Monday から Sunday までという単位は考慮していませんでした。
5.3.0 | PHP 5.3.0 より前のバージョンでは、24:00 は無効なフォーマットとされており strtotime() は `FALSE` を返していました。
5.2.7 | 5.2.7 より前の PHP 5 では、「ある月の何回目の何曜日」 を取得するときにもしその月の初日がその曜日だった場合、 タイムスタンプが間違って一週間追加されてしまっていました。 これは 5.2.7 以降のバージョンでは修正されています。
5.1.0 | 失敗時に -1 の代わりに `FALSE` を返すようになりました。
5.1.0 | タイムゾーンがおかしい場合に `E_STRICT` や `E_NOTICE` が発生するようになりました。
5.0.2 | 5.0.2 までの PHP 5 では、"now" やその他の相対時刻は誤って当日の真夜中から計算されます。 他のバージョンでは、これは正しく現在時刻から計算されます。
5.0.0 | マイクロ秒も受け付けるようになりましたが、指定してもそれは無視されます。

### 例

例1 A 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';
// PHP 5.1.0 以前では、false の代わりに -1 と比較する
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);
}
?>`

### 注意

> 注意:

> 年を 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 ビット符号付整数の最大及び最小に一致します)。

> 全てのプラットフォームが負のタイムスタンプをサポートしている わけではありませんので、PHP 5.1.0 より前のバージョンでは、日付の範囲が Unix エポック以前にはならないかも知れません。 これは、例えば Windows やいくつかの Linux ディストリビューション、 いくつかの他のオペレーティングシステムでは 1970 年 1 月 1 日以前の日付では動作しない事を意味しています。

> 64 ビット版の PHP では、タイムスタンプの有効範囲は事実上無制限です。 というのも、64 ビットでは過去側も未来側も約 2930 億年を表せるからです。

> 注意:

> m/d/y あるいは d-m-y といった書式の曖昧さを解決する際には、区切り文字を利用します。スラッシュ (/) で区切られている場合はアメリカ風の m/d/y とみなし、ダッシュ (-) あるいはドット (.) で区切られている場合はヨーロッパ風の d-m-y であるとみなします。 しかし、年を二桁で表して区切り文字がダッシュ (-) である場合は、 y-m-d であるとみなします。

> このような曖昧さを避けるためにも、ISO 8601 形式 (YYYY-MM-DD) を使うか、可能であれば DateTime::createFromFormat() を使うことを推奨します。

> 注意:

> この関数を使って日付の足し算や引き算を行うことはおすすめできません。 PHP 5.3 以降なら DateTime::add() や DateTime::sub() を、そして PHP 5.2 なら DateTime::modify() を使いましょう。

### 参考

- 日付と時刻の書式
- DateTime::createFromFormat() - 指定した書式で時刻文字列をパースする
- checkdate() - グレゴリオ暦の日付/時刻の妥当性を確認します
- strptime() - strftime が生成した日付/時刻をパースする