まず、関数を使用できるようにする DateTime オブジェクトを使用することを強く支持しDateTime::createFromFormat()ます。DateTime オブジェクトを使用すると、コードがはるかに読みやすくなり、60 * 60 * 24 を使用して Unix タイムスタンプ全体を変更して日付を進める必要がなくなります。
そうは言っても、 strtotime() が取る任意の文字列を予測するのはそれほど難しくありません。サポートされている日付と時刻の形式に、サポートされている形式を示します。
MM/DD/YYYY と DD/MM/YYYY を区別できない例のように、Date Formatsに基づいて区別します。スラッシュを使用する日付は、常にアメリカ形式として読み取られます。したがって、00/00/0000 の形式の日付は常に MM/DD/YYYY として読み取られます。または、ダッシュまたはピリオドを使用すると DMY になります。たとえば、00-00-0000 は常に DD-MM-YYYY として読み取られます。
ここではいくつかの例を示します。
<?php
$dates = array(
// MM DD YYYY
'11/12/2013' => strtotime('2013-11-12'),
// Using 0 goes to the previous month
'0/12/2013' => strtotime('2012-12-12'),
// 31st of November (30 days) goes to 1st December
'11/31/2013' => strtotime('2013-12-01'),
// There isn't a 25th month... expect false
'25/12/2013' => false,
// DD MM YYYY
'11-12-2013' => strtotime('2013-12-11'),
'11.12.2013' => strtotime('2013-12-11'),
'31.12.2013' => strtotime('2013-12-31'),
// There isn't a 25th month expect false
'12.25.2013' => false,
);
foreach($dates as $date => $expected) {
assert(strtotime($date) == $expected);
}
ご覧のとおり、いくつかの重要な例が25/12/2013あり、12.25.2013どちらも反対の形式で読み取った場合に有効ですがfalse、サポートされている日付と時刻の形式に従って無効であるため、返されます...
ご覧のとおり、動作は非常に予測可能です。いつものように、使用入力から日付を受け取る場合は、最初にその入力を検証する必要があります。最初に入力を検証しないと、どの方法も機能しません。
読み取られる日付について非常に具体的にしたい場合、または指定された形式がサポートされていない形式である場合は、を使用することをお勧めしDateTime::createFromFormat()ます。