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_Datetime - Fatal编程技术网

PHP计算没有年份的两个日期之间的差异

PHP计算没有年份的两个日期之间的差异,php,date,datetime,Php,Date,Datetime,我通常使用此方法计算两个日期之间的差异: $datediff = strtotime($enddate) - strtotime($startdate); $totalDays = floor($datediff/(60*60*24)); 但现在我遇到了一个问题。现在我不应该考虑计算中的年份。这意味着,例如,2014年1月2日和2015年1月6日这两个日期之间的差值应为4天 为此,我将日期格式更改为m-d,并使用以下方法: $startdate = date('m-d',str

我通常使用此方法计算两个日期之间的差异:

$datediff = strtotime($enddate) - strtotime($startdate);        
$totalDays = floor($datediff/(60*60*24));
但现在我遇到了一个问题。现在我不应该考虑计算中的年份。这意味着,例如,2014年1月2日和2015年1月6日这两个日期之间的差值应为4天

为此,我将日期格式更改为
m-d
,并使用以下方法:

$startdate = date('m-d',strtotime($startdate));
$enddate = date('m-d',strtotime($enddate));
$datediff = $enddate - $startdate;
$totalDays = floor($datediff/(60*60*24));

但我得到的结果是0。有人能帮我吗?我犯了什么错误?

你可以用1970年来代替这一年,然后用它来计算

$date1 = '2014-01-17 04:05:54';
$date2 = '2013-01-12 02:07:54';

$date1 = preg_replace('/([\d]{4})/', '1970', $date1);
$date2 = preg_replace('/([\d]{4})/', '1970', $date2);

$timestamp1 = strtotime($date1);
$timestamp2 = strtotime($date2);

$date_diff = gmdate('d H:i:s', abs($timestamp2-$timestamp1));

var_dump($date_diff);
只需在日期的“m-d”部分加上任何年份,例如“-2014”。然后,
datediff()
将为您提供所需的答案。

请尝试以下操作:

$startdate = 'January 1 2014';
$enddate =  'February 6 2015';
$startdate = date('d-m-1970',strtotime($startdate));
$enddate = date('d-m-1970',strtotime($enddate));
$datediff = strtotime($enddate) - strtotime($startdate);
$totalDays = floor($datediff/(60*60*24));
echo $totalDays;

希望这会有所帮助

这是php日期时间解决方案

$date1 = new DateTime('2015-01-02');
$date2 = new DateTime('2014-01-06');

switch (true) {
    case ($date1 < $date2) :
        $date2->setDate($date1->format('Y'), $date2->format('m'), $date2->format('d'));
        break;

    case ($date2 < $date1) :
        $date1->setDate($date2->format('Y'), $date1->format('m'), $date1->format('d'));
        break;
}

$interval = $date1->diff($date2);
echo $interval->format('%R%a days'); // +4 days
$date1=新日期时间('2015-01-02');
$date2=新日期时间('2014-01-06');
开关(真){
案例(日期1<日期2):
$date2->setDate($date1->格式('Y'),$date2->格式('m'),$date2->格式('d');
打破
案例($date2<$date1):
$date1->setDate($date2->格式('Y'),$date1->格式('m'),$date1->格式('d');
打破
}
$interval=$date1->diff($date2);
echo$interval->格式(“%R%a天”);//+4天
玩得开心


或者干脆切断年份,去掉切换部分。

你考虑过闰年吗?这么多糟糕的解决方案:(使用php date-time对象只传入日期的m-d部分,并使用date-diff函数,我将使用1972,这样我们也可以针对闰年进行测试:)