[英]Difference between two dates ignoring year
Python 日期時間對象需要一年,但是我只想寫一個 function 輸出忽略年份的兩個日月之間的日期差異。 這意味着 function 的 output 范圍是 [-182, 183],因為計算應該“環繞”一年。
示例:目標日期:1 月 1 日猜測:12 月 31 日結果:-1
目標日期:1 月 1 日猜測:1 月 2 日結果:+1
def date_diff(goal, guess):
#goal and guess are in the format "%m-%d"
goal_date = datetime.strptime(goal + "-2020", "%m-%d-%Y")
goal_date1 = datetime.strptime(goal + "-2021", "%m-%d-%Y")
guess_date = datetime.strptime(guess + "-2020", "%m-%d-%Y")
guess_date1 = datetime.strptime(guess + "-2021", "%m-%d-%Y")
r1 = goal_date - guess_date
r1 = r1.days
r3 = goal_date1 - guess_date
r3 = r3.days
r2 = guess_date1 - goal_date
r2 = r2.days
r4 = guess_date - goal_date
r4 = r4.days
r = ((r1, math.copysign(1, r1)), (r2, math.copysign(1, r2)),(r3, math.copysign(1, r2)),(r4, math.copysign(1, r4)))
#idea here was the find min of index 0 of each tuple then restore the sign, but i think i'm missing some combinations
smallest = min(r, key = lambda x:abs(x[0]))
return smallest[0]*smallest[1]
您可以在第一個日期的上一年、同一年和下一年取與第二個日期的最小(絕對)差異
例如:
from datetime import date
def dateDelta(d1,d2):
return min(((date(d1.year+i,d2.month,d2.day)-d1).days
for i in (-1,0,1)),key=abs)
d1 = date(2002,10,15)
d2 = date(2002,2,3)
print(dateDelta(d1,d2)) # 111
print(dateDelta(d2,d1)) # -111
請注意,根據您選擇的參考年份,您可能會得到不同的結果。 為避免閏年的干擾,select 為 d1 的非閏年,既不在閏年之前也不在閏年之后(例如 2002 年,或任何年份 mod 4 == 2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.