from datetime import datetime


def 获取相差月数(时间1: str, 时间2: str) -> int | None:
    """计算两个时间相差多少个完整月。

    功能说明:
        - 这个函数用于计算两个标准时间之间相差多少个“完整月”。
        - 返回结果保留正负号，第二个时间更晚时返回正数。
        - 如果不足一个完整月，就不会进位成 1。
        - 输入格式不正确时，函数返回 ``None``。

    Args:
        时间1: 起始时间字符串，格式为 ``YYYY-MM-DD HH:MM:SS``。
        时间2: 结束时间字符串，格式为 ``YYYY-MM-DD HH:MM:SS``。

    Returns:
        成功时返回完整月数差；失败时返回 ``None``。
    """
    try:
        t1 = datetime.strptime(时间1.strip(), "%Y-%m-%d %H:%M:%S")
        t2 = datetime.strptime(时间2.strip(), "%Y-%m-%d %H:%M:%S")

        符号 = 1
        if t2 < t1:
            t1, t2 = t2, t1
            符号 = -1

        月数差 = (t2.year - t1.year) * 12 + (t2.month - t1.month)
        if (t2.day, t2.hour, t2.minute, t2.second) < (t1.day, t1.hour, t1.minute, t1.second):
            月数差 -= 1
        return 月数差 * 符号
    except Exception:
        return None


if __name__ == "__main__":
    print("===== 示例1：刚好相差 1 个完整月 =====")
    print("结果:", 获取相差月数("2026-01-15 10:00:00", "2026-02-15 10:00:00"))

    print("\n===== 示例2：不足 1 个完整月 =====")
    print("结果:", 获取相差月数("2026-01-15 10:00:00", "2026-02-14 10:00:00"))

    print("\n===== 示例3：跨年完整月数 =====")
    print("结果:", 获取相差月数("2025-11-01 00:00:00", "2026-03-01 00:00:00"))

    print("\n===== 示例4：第二个时间更早 =====")
    print("结果:", 获取相差月数("2026-03-01 00:00:00", "2025-11-01 00:00:00"))

    print("\n===== 示例5：输入错误格式 =====")
    print("结果:", 获取相差月数("2026/01/15", "2026-02-15 10:00:00"))

    print("\n===== 示例6：应用场景-计算会员已连续订阅多少个月 =====")
    print("结果:", 获取相差月数("2025-12-20 09:00:00", "2026-03-20 09:00:00"))
