2017-12-05 14 views
-2

2つの変数が2つの誕生日です。私はねえ、あなたが、ほぼ同じ年齢を持っているようだ」というメッセージを表示するための両方を比較したい!」Python - 誕生日の比較

def calculate_age(born): 
    today = date.today() 
    return today.year - born.year - ((today.month, today.day) < (born.month, born.day)) 

def view_player(request, id_player): 
    media = settings.MEDIA 

    try: 
     team = Team.objects.get(owner=request.user) 
    except: 
     pass 

    player = User.objects.get(id=id_player) 
    favorite = FavoriteGame.objects.filter(on_profile=player.profile) 

    try : 
     his_birthdate = calculate_age(born=player.profile.birthdate) 
     my_birthdate = calculate_age(born=request.user.profile.birthdate) 

    except: 
     pass 

    return render(request, 'player.html', locals()) 

うーん...私は両方の人が差の最大3年であれば、我々は彼らことをconsidereことができると思います。

、ほぼ同じ年齢を持っているあなたは私が何を意味するか知っているのであれば、私はこのような多くの条件を行うことができます。

try : 
    his_birthdate = player.profile.birthdate 
    my_birthdate = request.user.profile.birthdate 

    if his_birthdate > my_birthdate + 3: 
     .... 
    if his_birthdate > my_birthdate - 3: 
     .... 

except: 
    pass 

しかし、私はよりよい解決策があると思い

? ご協力いただきありがとうございます !

+0

何種類ある3未満 'player.profile.birthdateです'? –

+0

私は私の投稿を更新します。 Int – GrandGTO

答えて

1

違いを取ることができます。次に、他のものから1つを減算してtimedeltaオブジェクトを生成します。このオブジェクトは、2つの日付間の差異を年を含めてテストできます。

時間デルタオブジェクトで3年の値を表現し、次に誕生日の差異をそれ以下の演算子<=と比較することもできます。

差はそうでない場合は、負のだろうと、絶対値を考慮して、以上から小さい日付を取ることを確認し、すべての負の数は

+0

はい、私は自分の投稿を更新します。 – GrandGTO

1

は、ちょうどあなたがdatetimeオブジェクトに、両方の日付文字列を解析することをお勧めします

if abs(his_birthdate-my_birthdate) <=3: 
     ... 
+0

はいを​​返しますが、結果が-4の場合は?問題があります – GrandGTO

+1

これは絶対値を 'abs()'で取る理由です! – erocoar

+0

それはおそらく 'abs(...)'が存在する理由です。 –