2012-03-11 6 views
1

jquery datepickerプラグインを使用して、Fromの日付とToの日付を取得しています。以下はPOSTの出力です。私はstrtotimeの振る舞いで奇妙です

Array (
    [fromDate] => 01/03/2012 
    [toDate] => 15/03/2012 
    [hdnDownload] => Download 
) 

私はこのような別の日付フォーマットにこの日付フォーマットを変換しようとしています:

fromdate: 2012-1-3 
todate:1969-12-31 

fromDateからは大丈夫ですが、のToDate:

echo'fromdate'.$fromDate = date("Y/n/j", strtotime($_POST['fromDate'])); 
echo'todate'.$toDate = date("Y/n/j", strtotime($_POST['toDate'])); 

それは私に次のような出力を提供しますあなたが私を助けてくれますか?

+0

strtotimeは奇妙な動作を示すことがあります。結局のところ、非常に多くの日付形式があります。 mm/dd/yyyy、dd/mm/yyyyなどです。05/04/2012と2010年4月5日とは何ですか?フォーマットなしでは、あなたが話している日付を知ることができません。 strtotimeが私のようにうまく動作しない場合は、手動で日付形式を逆コンパイルしてみてください。http://stackoverflow.com/questions/9568407/i-want-to-add-100-years-to-表示された単語の日付/ 9568726#9568726 –

答えて

0

strtotime()入力が無効または不正な形式の場合、予期しない結果が生じることがあります。 $_POST['toDate']は、strtotimeが正しく機能するためには無効です。

あなたが取得した日付は、あなたのタイムゾーンの開始日であるUnix Timeです。

クラスまたはdate()機能のように、strtotime以外のものを使用することをお勧めします。

2

おそらくDateTime::createFromFormat()を使用する必要があります。

php > $date = DateTime::createFromFormat('i/n/Y', '15/03/2012'); 
php > echo $date->format('Y/n/j'); 
// 2012/3/11 

あなたが入力形式を指定することができますので、これは便利です。 xx/yy/YYは、i/n/Yn/i/Yのいずれかで表すことができ、したがって、日付はあいまいであり、予期しない動作です。

2

正しい結果を得られるようにするためには、PHP> = 5.3.0またはPHP> = 5.1.0のstrptime()を使用している場合はDateTime::createFromFormat()、入力フォーマットを指定することができます。

あなたはまだそこに自由な形式を許可したい場合は、この特定のフォーマットのための正規表現をチェックして、唯一のようなアメリカのM/D/Y、何かのためにこれらのいずれかを使用する松葉杖、作りたいかもしれませんが:

function parsedate($date) { 
    if (preg_match('#\d{1,2}/\d{1,2}/\d{2,4}#', $date)) { 
     $parsed = strptime($date, '%m/%d/%Y'); 
     return mktime(0, 0, 0, $parsed['tm_mon'], $parsed['tm_mday'], 1900+$parsed['tm_year']); 
      // 'tm_year' is years since 1900 
    } else { 
     return strtotime($date); 
    } 
} 

それはまだ松葉杖ですが、私はどんなクリーナーの方法も見ることができません。

0

fromDateからは、あなたが03を望んでいたとしても間違っている月にならない1.

あなたのケースでのstrtotimeが入力を考えているが月/日/年で、15として、それが台無し月ではありません。

あなたは

[fromDate] => 03/01/2012 
[toDate] => 03/15/2012 

にご入力文字列を入れ替えるか、@ Vyktorの答えにcreateFromFormatを使用することができますどちらか。