所以我有两个包含日期的表单字段。
使用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返回以下内容。
如果我的日期是mm / dd / yy格式,那么它是正确的:
为什么?
答案 0 :(得分: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。
答案 1 :(得分: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'));