代码之家  ›  专栏  ›  技术社区  ›  Tatu Ulmanen

计算日期之间的月数

  •  3
  • Tatu Ulmanen  · 技术社区  · 15 年前

    示例:

    • 2010-01-01 - 2010-03-31 =三个月
    • 2010-06-15 - 2010-09-01

    等等。我曾想过将时间戳的差值除以2592000(一个月的平均秒数),但这似乎有点老套,而且容易出错。我想保持它尽可能快(需要运行数千倍的速度),所以我想使用 strtotime 也不是最优的吗?

    2 回复  |  直到 15 年前
        1
  •  7
  •   thomasrutter    15 年前

    如果我读对了你的问题,你应该返回1月31日和2月1日的“2”,因为它跨越了1月和2月,尽管它们只相隔1天。

    您可以计算(伪代码):

    monthno1 = (date1_year * 12) + date1_month;
    monthno2 = (date2_year * 12) + date2_month;
    
    return (monthno2 - monthno1) + 1;
    

    这假设第二个日期是较晚的日期。

        2
  •  1
  •   Ed Mazur    15 年前

    function getMonths($start, $end) {
        $startParsed = date_parse_from_format('Y-m-d', $start);
        $startMonth = $startParsed['month'];
        $startYear = $startParsed['year'];
    
        $endParsed = date_parse_from_format('Y-m-d', $end);
        $endMonth = $endParsed['month'];
        $endYear = $endParsed['year'];
    
        return ($endYear - $startYear) * 12 + ($endMonth - $startMonth) + 1;
    }
    

    print(getMonths('2010-01-01', '2010-03-31')); // 3
    print(getMonths('2010-06-15', '2010-09-01')); // 4
    
    推荐文章