如果我有两个日期 - $end_date
和$start_date
,我如何以“2年:4个月:2天”等格式表达两者之间的差异?
我知道我可以像这样得到两个日期之间的区别:
$dif=strtotime($end_date)-strtotime($today);
但是如何将该结果转换为人类可读的格式,如上所示?
答案 0 :(得分:2)
这是格式化时间戳的方法:
echo date('d-m-Y', strtotime($end_date)) // for DD-MM-YYYY format
您是否希望计算2个日期之间的差异,以天数计算?
编辑:在“XXyear YYmonth ZZday”中查找日期之间差异的代码。该代码假定开始和结束日期为YYYY-MM-DD格式。如果您不是这种情况,请将其更改为YYYY-MM-DD格式,或相应地将参数更改为mktime()。
$endDate = '2011-03-01';
$startDate = '2011-02-02';
$daysPerYear = 365;
$daysPerMonth = 30.4;
$diffDay = $diffMonth = $diffYear = 0;
$endDateTs = mktime(0, 0, 0, substr($endDate, 5, 2), substr($endDate, 8, 2), substr($endDate, 0, 4));
$startDateTs = mktime(0, 0, 0, substr($startDate, 5, 2), substr($startDate, 8, 2), substr($startDate, 0, 4));
$diffDay = ($endDateTs - $startDateTs) / 60 / 60/ 24; // difference between 2 dates in number of days
$diffYear = floor($diffDay / $daysPerYear); // difference in years
$diffDay = $diffDay % $daysPerYear; // balance days
$diffMonth = floor($diffDay / $daysPerMonth); // difference in months
$diffDay = ceil($diffDay % $daysPerMonth); // balance days
echo ($diffYear ? $diffYear . 'year ' : '') . ($diffMonth ? $diffMonth . 'month ' : '') . ($diffDay ? $diffDay . 'day' : '');
注意:我没有测试所有可能日期组合的代码,包括闰年等。请随时根据需要进行调整。
希望这有帮助。
答案 1 :(得分:1)
如果粗略差异足够(“2年前”),那么您可能想尝试Date_HumanDiff PEAR包。
答案 2 :(得分:0)
function is_leap_year($year)
{
if($year % 4 == 0)
{
if($year % 100 == 0)
{
if($year % 400 == 0)
{
return true;
}
else
{
return false;
}
}
else
{
return true;
}
}
else
{
return false;
}
}
function calculate_date($now, $end){
$years = date('Y', strtotime($end)) - date('Y', strtotime($now)) ;
if($years < 0)
{
return "Error: year";
}
$mounths = date('m', strtotime($end)) - date('m', strtotime($now)) ;
if($mounths < 0)
{
if($years < 1)
{
return "Error: mounth and year";
}
else
{
$years --;
$mounths += 12;
}
}
$days = date('d', strtotime($end)) - date('d', strtotime($now)) ;
if($days < 0){
if($mounths < 1)
{
if($years < 1)
{
return "Error: day, mounth and year";
}
else
{
$years --;
$mounths += 12;
}
}
else
{
$mounths --;
switch (date('m', strtotime($now)))
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
$days +=31;
break;
case 4:
case 6:
case 9:
case 11:
$days +=30;
break;
case 2:
if(is_leap_year(date('Y', strtotime($now))))
{
$days += 29;
break;
}
else
{
$days += 28;
break;
}
}
}
}
return $years . " Years : " . $mounths . " Months : " . $days . " Days Remaining.";
}
$end_date = new DateTime('2011-08-05');
$end_date = $end_date->format('d-m-Y');
$today = date('d-m-Y');
$remaining = calculate_date($today, $end_date);
echo $remaining;
如果你想格式化end_date,你可以使用: 日期('d-m-Y',strtotime($ end_date)) 之后,您可以使用calculate_date计算剩余时间。