Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数查找两个在PHP中不起作用的日期之间的日期_Php_Date - Fatal编程技术网

函数查找两个在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>"

我有一个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>";
        $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;
}