PHP date_create / date_diff 仅适用于美国日期格式?
PHP date_create / date_diff only works with american date-format?
所以我有两个包含日期的表单域。
使用 jQuery-UI 日期选择器,我将它们的格式设置为 dd/mm/yy
.
我使用一个函数 return 我计算两个日期之间的天数:
function getDaysBetween($date1, $date2){
$datetime1 = date_create($date1);
$datetime2 = date_create($date2);
$interval = date_diff($datetime1, $datetime2);
return $interval->days;
}
出于调试目的,我之后会提醒该值。
所以,如果我的日期是 dd/mm/yy 格式,php return 开始日期 = 01/04/2016 和结束日期 = 03/04/2016。
如果我的日期是 mm/dd/yy 格式,那么它是正确的:
为什么?
无论如何,您都应该在数据库中使用日期 "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'));
您应该使用 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。
所以我有两个包含日期的表单域。
使用 jQuery-UI 日期选择器,我将它们的格式设置为 dd/mm/yy
.
我使用一个函数 return 我计算两个日期之间的天数:
function getDaysBetween($date1, $date2){
$datetime1 = date_create($date1);
$datetime2 = date_create($date2);
$interval = date_diff($datetime1, $datetime2);
return $interval->days;
}
出于调试目的,我之后会提醒该值。
所以,如果我的日期是 dd/mm/yy 格式,php return 开始日期 = 01/04/2016 和结束日期 = 03/04/2016。
如果我的日期是 mm/dd/yy 格式,那么它是正确的:
为什么?
无论如何,您都应该在数据库中使用日期 "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'));
您应该使用 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。