2016-04-01 81 views
0

所以我有兩個包含日期的表單域。PHP的date_create/date_diff只適用於美國的日期格式?

使用jQuery-UI Datepicker,我將它們的格式設置爲dd/mm/yy

我用回我的兩個日期之間的天功能:

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參數)。 –

回答

2

您應該使用DateTime::createFromFormat,而不是date_create()

因此,修改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後,只需使用

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