2016-04-01 10 views
0

私は日付を含む2つのフォームフィールドを持っています。PHP date_create/date_diffは、アメリカの日付形式でのみ動作しますか?

jQuery-UI Datepickerを使用して、フォーマットdoをdd/mm/yyに設定しました。

私は私の2つの日付の間の日数を返す関数を使用します。私はデバッグの目的のために、その後値を警告

function getDaysBetween($date1, $date2){ 
    $datetime1 = date_create($date1); 
    $datetime2 = date_create($date2); 
    $interval = date_diff($datetime1, $datetime2); 
    return $interval->days; 
} 

を。

私の日付がdd/mm/yy形式である場合、phpはstartdate = 01/04/2016とenddate = 03/04/2016に次の値を返します。

enter image description here

私の日付は、しかし、mm/dd/yy形式である場合、それは正しくあり:

enter image description here

なぜ?

+0

代わりに 'DateTime :: createFromFormat($ format、$ date)'を使用してください。 http://php.net/manual/en/datetime.createfromformat.php –

+0

'date_create()'の受け入れられた日付と時刻の形式は、[よく文書化されています](http://php.net/manual/en/datetime。 construct.php#refsect1-datetime.construct-parameters)。 –

答えて

2

を使用しています。

ので、このようなあなたのgetDaysBetween()機能を変更します。

function getDaysBetween($date1, $date2, $format = 'd-m-Y'){ 
    $datetime1 = DateTime::createFromFormat($format, $date1); 
    $datetime2 = DateTime::createFromFormat($format, $date2); 
    $interval = date_diff($datetime1, $datetime2); 
    return $interval->days; 
} 

を次に、あなたはd-m-Yとしてフォーマットの日付のために、このようにその機能を使用することができます。

getDaysBetween('01-02-2016', '01-04-2016')); // -> OUTPUTS int(60) 

あなたの入力は異なるフォーマットである場合d-m-Yから、余分なパラメータとしてフォーマットに沿って渡します。

いくつかの例:

getDaysBetween('3-2-2016', '15-5-2016', 'j-n-Y'); // -> OUTPUTS int(102) 


getDaysBetween('9-Dec-2015', '28-Mar-2015', 'j-M-Y'); // -> OUTPUTS int(256) 


getDaysBetween('15/8/24', '15/11/18', 'y/m/d'); // -> OUTPUTS int(86) 

はサポートされているフォーマットの概要についてはthe documentationを参照してください。

0

データベースで日付「YYYY-MM-DD」を使用する必要があります。これにより、日付順に並べ替えることができます。だからあなたはあなたのタイムゾーンを設定し、date_diffを使用する必要があります。そして、あなたはMM-DD-YYYYのような出力にしたい場合は後ちょうどあなたがDateTime::createFromFormat代わりのdate_create()を使用する必要があります

<?php 
date_default_timezone_set('America/Montreal'); 

$date_a = new DateTime('2016-02-01'); 
$date_b = new DateTime('2016-04-01'); 

$interval = date_diff($date_a, $date_b); 

echo $interval->format('%d'); 

echo date('m-d-Y', strtotime('2016-02-01')); 
関連する問題