2016-04-01 2 views
0

Also habe ich zwei Formularfelder mit Daten.PHP date_create/date_diff funktioniert nur mit amerikanischem Datumsformat?

Mit jQuery-UI Datepicker, habe ich ihr Format tun dd/mm/yy.

Ich verwende eine Funktion, die mir die Tage zwischen zwei Daten zurück:

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

ich den Wert danach Zwecke für die Fehlersuche alarmieren.

Also, wenn mein Datum im Format TT/MM/JJ ist, gibt PHP für Startdatum = 01/04/2016 und Enddatum = 03/04/2016 Folgendes zurück.

enter image description here

Wenn meine Daten jedoch in mm/tt/jj-Format sind, ist es richtig:

enter image description here

Warum?

+0

Verwenden Sie stattdessen 'DateTime :: createFromFormat ($ format, $ date)'. http://php.net/manual/en/datetime.createfromformat.php –

+0

Die akzeptierten Formate für Datum und Uhrzeit von 'date_create()' sind [gut dokumentiert] (http://php.net/manual/en/datetime). construct.php # refsect1-datetime.construct-Parameter). –

Antwort

2

Sie sollten DateTime::createFromFormat statt date_create() verwenden.

So ändern Sie Ihre getDaysBetween() Funktion wie folgt aus:

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; 
} 

Dann, können Sie diese Funktion, wie dies für Termine als d-m-Y formatiert verwenden:

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

Wenn Sie Ihre Eingabe ist in einem anderen Format von d-m-Y, übergeben Sie einfach das Format als zusätzlichen Parameter.

Einige Beispiele:

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) 

Siehe the documentation für eine Übersicht der unterstützten Formate.

0

Sie sollten das Datum "YYYY-MM-DD" trotzdem in Ihrer Datenbank verwenden, damit Sie nach dem Datum sortieren können. Sie müssen also nur Ihre Zeitzone einstellen und date_diff verwenden. Und nach, wenn Sie ausgeben möchten sie wie MM-DD-YYYY verwenden nur

<?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'));