函数查找两个在PHP中不起作用的日期之间的日期
我有一个PHP函数,可以用函数查找两个在PHP中不起作用的日期之间的日期,php,date,Php,Date,我有一个PHP函数,可以用'd/m/Y'格式查找两个日期之间的日期 function dateRange($first, $last, $step = '+1 day', $format = 'd/m/Y' ) { echo $first; echo "<br>"; echo $last; echo "<br>"; echo $step; echo "<br>"
'd/m/Y'
格式查找两个日期之间的日期
function dateRange($first, $last, $step = '+1 day', $format = 'd/m/Y' )
{
echo $first;
echo "<br>";
echo $last;
echo "<br>";
echo $step;
echo "<br>";
$dates = array();
$current = strtotime($first);
$last = strtotime($last);
while( $current <= $last )
{
$dates[] = date($format, $current);
$current = strtotime($step, $current);
}
print_r($dates);
exit;
return $dates;
}
由于我在打印第一个结果后退出了该函数,它应该打印一个日期。但是它打印的日期是1970年1月1日
此函数有什么问题?尝试将
'/'
替换为'-'
$first = str_replace('/', '-', '20/05/2014');
$last = str_replace('/', '-', '31/05/2014');
因此,代码将是:-
function dateRange($first, $last, $step = '+1 days', $format = 'd/m/Y' )
{
echo $first;
echo "<br>";
echo $last;
echo "<br>";
echo $step;
echo "<br>";
$dates = array();
$current = strtotime($first);
$last = strtotime($last);
while( $current <= $last )
{
$dates[] = date($format, $current);
$current = strtotime($step, $current);
}
print_r($dates);
exit;
return $dates;
}
$first = str_replace('/', '-', '20/05/2014');
$last = str_replace('/', '-', '31/05/2014');
dateRange($first, $last, $step = '+1 day', $format = 'd/m/Y' );
只是在你的功能上做些改变
$current = strtotime(str_replace("/", "-", $first));
$last = strtotime(str_replace("/", "-", $last));
而不是
$current = strtotime($first);
$last = strtotime($last);
因为
strotime
无法转换日期格式d/m/Y
的时间戳。它将转换日期格式的时间戳d-m-Y
以下是使用DateTime()
和相关类执行此操作的方法:
function dateRange($first, $last, $step = '+1 day', $format = 'd/m/Y' )
{
$dates = array();
$start = DateTime::createFromFormat($format, $first);
$finish = DateTime::createFromFormat($format, $last);
$finish->modify($step); // make sure last date is included
$interval = DateInterval::createFromDateString($step);
$period = new DatePeriod($start, $interval, $finish);
foreach ($period as $date) {
$dates[] = $date->format($format);
}
return $dates;
}
这解决了由于strotime()
使用斜杠处理日期而导致日期格式无法工作的问题。它假定为m/d/Y
,而不是d/m/Y
。它还允许您将格式更改为strotime()
无法接受的格式,并且仍然可以工作
$current = strtotime($first);
$last = strtotime($last);
function dateRange($first, $last, $step = '+1 day', $format = 'd/m/Y' )
{
$dates = array();
$start = DateTime::createFromFormat($format, $first);
$finish = DateTime::createFromFormat($format, $last);
$finish->modify($step); // make sure last date is included
$interval = DateInterval::createFromDateString($step);
$period = new DatePeriod($start, $interval, $finish);
foreach ($period as $date) {
$dates[] = $date->format($format);
}
return $dates;
}