Ưu điểm của làm nó theo cách này là có rất ít phụ thuộc mô-đun và không có vòng lặp - các tháng có thể được tìm thấy bằng cách tính toán thẳng.
import datetime as dt
def months_between(date1,date2):
if date1>date2:
date1,date2=date2,date1
m1=date1.year*12+date1.month
m2=date2.year*12+date2.month
months=m2-m1
if date1.day>date2.day:
months-=1
elif date1.day==date2.day:
seconds1=date1.hour*3600+date1.minute+date1.second
seconds2=date2.hour*3600+date2.minute+date2.second
if seconds1>seconds2:
months-=1
return months
date1 = dt.datetime.strptime('2011-08-15 12:00:00', '%Y-%m-%d %H:%M:%S')
date2 = dt.datetime.strptime('2012-02-15', '%Y-%m-%d')
print(months_between(date1,date2))
# 5
date1 = dt.datetime.strptime('2011-08-15 12:00:00', '%Y-%m-%d %H:%M:%S')
date2 = dt.datetime.strptime('2012-02-15 11:59:00', '%Y-%m-%d %X')
print(months_between(date1,date2))
# 5
date2 = dt.datetime.strptime('2012-02-15 12:00:00', '%Y-%m-%d %X')
print(months_between(date1,date2))
# 6
date2 = dt.datetime.strptime('2012-02-15 12:00:01', '%Y-%m-%d %X')
print(months_between(date1,date2))
# 6
Câu hỏi này đã được trả lời ở đây: http://stackoverflow.com/questions/4039879/best-way-to-find-the-months-giữa-hai-ngày-trong-python – Dan
không cho datetime với giờ –
Điều này sẽ dễ dàng hơn để trả lời khi bạn quyết định chính xác "số tháng chính xác" nghĩa là gì. Một tháng không phải là thời lượng cố định; nó có thể thay đổi từ 28 đến 31 ngày. Ngày 1 tháng 1 và ngày 1 tháng 2 cách xa nhau hơn ngày 1 tháng 2 và ngày 1 tháng 3; bạn có gọi cả hai khoảng "chính xác 1 tháng" không? –