Kar*_*hik 11 php datetime date
有没有办法找到PHP的月份差异?我有从2003-10-17到2004-03-24的输入.我需要找到这两天内有多少个月.比如说6个月,我只需要几个月的输出.感谢您指导我一天的差异.
我通过MySQL找到了解决方案,但我需要在PHP中使用它.有人帮助我,提前谢谢.
dec*_*eze 69
没有重新发明轮子的最简单方法.这将给你完整的月份差异.即以下两个日期差不多 76个月,但结果是75个月.
date_default_timezone_set('Asia/Tokyo'); // you are required to set a timezone
$date1 = new DateTime('2009-08-12');
$date2 = new DateTime('2003-04-14');
$diff = $date1->diff($date2);
echo (($diff->format('%y') * 12) + $diff->format('%m')) . " full months difference";
Run Code Online (Sandbox Code Playgroud)
Val*_*spa 20
在测试了大量的解决方案后,将所有解决方案全部用于单元测试,这就是我提出的:
/**
* Calculate the difference in months between two dates (v1 / 18.11.2013)
*
* @param \DateTime $date1
* @param \DateTime $date2
* @return int
*/
public static function diffInMonths(\DateTime $date1, \DateTime $date2)
{
$diff = $date1->diff($date2);
$months = $diff->y * 12 + $diff->m + $diff->d / 30;
return (int) round($months);
}
Run Code Online (Sandbox Code Playgroud)
例如,它将返回(来自单元测试的测试用例):
注意:由于它与日期的四舍五入,即使是半个月也会四舍五入,如果你在某些情况下使用它可能会导致问题.所以不要在这种情况下使用它,它会引起你的问题.
例如:
我只是想添加这个,如果有人正在寻找一个简单的解决方案,计算每个触及的月份,而不是完整的几个月,几个月或类似的东西.
// Build example data
$timeStart = strtotime("2003-10-17");
$timeEnd = strtotime("2004-03-24");
// Adding current month + all months in each passed year
$numMonths = 1 + (date("Y",$timeEnd)-date("Y",$timeStart))*12;
// Add/subtract month difference
$numMonths += date("m",$timeEnd)-date("m",$timeStart);
echo $numMonths;
Run Code Online (Sandbox Code Playgroud)
哇,想要解决问题的方法......这个版本怎么样:
function monthsBetween($startDate, $endDate) {
$retval = "";
// Assume YYYY-mm-dd - as is common MYSQL format
$splitStart = explode('-', $startDate);
$splitEnd = explode('-', $endDate);
if (is_array($splitStart) && is_array($splitEnd)) {
$difYears = $splitEnd[0] - $splitStart[0];
$difMonths = $splitEnd[1] - $splitStart[1];
$difDays = $splitEnd[2] - $splitStart[2];
$retval = ($difDays > 0) ? $difMonths : $difMonths - 1;
$retval += $difYears * 12;
}
return $retval;
}
Run Code Online (Sandbox Code Playgroud)
注意:与其他几个解决方案不同,这不依赖于PHP 5.3中添加的日期函数,因为许多共享主机还没有.
Tow*_*wer -8
这是一个快速的:
$date1 = mktime(0,0,0,10,0,2003); // m d y, use 0 for day
$date2 = mktime(0,0,0,3,0,2004); // m d y, use 0 for day
echo round(($date2-$date1) / 60 / 60 / 24 / 30);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
49823 次 |
最近记录: |