php - 计算日期之间的年/月/日

标签 php date

$date1 = "2000-01-01";
$date2 = "2011-03-14";

$diff = abs(strtotime($date2) - strtotime($date1));
$years = floor($diff / (365 * 60 * 60 * 24));
$months = ceil(($diff - ($years * 365 * 60 * 60 * 24)) / ((365 * 60 * 60 * 24) / 12));
$months2 = floor(($diff - ($years * 365 * 60 * 60 * 24)) / ((365 * 60 * 60 * 24) / 12));
$days = floor(($diff - $years * 365 * 60 * 60 * 24 - $months2 * 30 * 60 * 60 * 24)/ (60 * 60 * 24));

我得到的答案是11 years , 2 months and 14 days .不应该是11 years, 3 months and 14 days ?

我尝试了很多不同的方法,但我总是以 2 个月而不是 3 个月结束。有谁知道为什么?

最佳答案

尝试使用 PHP 的内置日期 API 而不是自己进行数学计算。

使用 DateTime , DateIntervalDateTime::diff功能:

$date1 = new DateTime("2000-01-01");
$date2 = new DateTime("2011-03-14");
$diff = $date2->diff($date1);
var_dump($diff);'
/* is prints: 
object(DateInterval)#3 (8) {
  ["y"]=>
  int(11)
  ["m"]=>
  int(2)
  ["d"]=>
  int(13)
  ["h"]=>
  int(0)
  ["i"]=>
  int(0)
  ["s"]=>
  int(0)
  ["invert"]=>
  int(1)
  ["days"]=>
  int(4090)
}
*/

至少这样你就不用担心你犯了错误(结果似乎是正确的)。

关于php - 计算日期之间的年/月/日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5309062/

相关文章:

PHP - 添加 1 天到日期格式 mm-dd-yyyy

java - 斯卡拉/Java : Ignore DateTimeException

sql - 如何组合一列中的日期和另一列中的时间

javascript - 如何将日期转换为正常格式,如 "2017-03-03 09:46:22.103"?

php - 字符串的正则表达式,必须至少包含 14 个字符,其中至少 2 个是数字,至少 6 个是字母

php - 具有相同日期的 Datediff 之和

php - SQL inner join 将整数转换为文本

javascript - Codeigniter 如果插入数据再次返回 true 到 json ?这是可能的?

PHP:从日期差异中获取整数

php - MySQL 查询 : Retrieve 'birthdays' (YYYY-MM-DD) from the database, 并选择那些在当前周(无论年份)下降的那些。/PHP