1
votes

Soustraction datetime dans Django

J'ai une date / heure comme ci-dessous. L'heure du vote est l'heure à laquelle l'utilisateur a voté la dernière fois. L'utilisateur ne peut à nouveau voter qu'après 15 minutes

current_datetime = 2020-06-27 10:07:29.906931
voted_datetime = 2020-06-25 12:59:56.554216
time_diff = current_datetime - voted_datetime 

which gives the output:
time_diff =  1 day, 21:07:33.352715

Après avoir obtenu time_diff , ce que je veux faire, c'est vérifier si time_diff est supérieur plus de 15 minutes. Si time_diff est supérieur à 15 minutes, je veux retourner true sinon renvoyer le temps restant à 15 minutes afin de pouvoir passer le temps restant au modèle et afficher le compte à rebours en utilisant javascript. Toute suggestion ou article connexe sera utile.


3 Réponses :


0
votes

Il semble que vous ayez déjà presque tout ce dont vous avez besoin. La seule chose qui reste est de définir la valeur de retour et l'instruction conditionnelle. Je suggérerais:

def view(request):
    # ... all your logic
    time_diff = current_datetime - voted_datetime
    minutes_to_vote = 0 if time_diff.seconds / 60 > 15 else 15 - time_diff.seconds // 60
    return render(request, 'foo.html', {'minutes_to_vote': minutes_to_vote}

Ensuite, dans la partie JS, vous pouvez vérifier si le minutes_to_vote est égal à zéro, auquel cas l'utilisateur peut voter. Sinon, affichez le compte à rebours souhaité en commençant par la valeur minutes_to_vote .


0 commentaires

0
votes

En soustrayant 2 objets datetime, vous obtenez un objet timedelta. Ensuite, vous vérifiez si ce délai est supérieur à un délai de 15 minutes.

import datetime
from time import sleep

voted = datetime.datetime.now() # Example datetime
sleep(3)
current = datetime.datetime.now() # Example datetime
elapsed = current - voted

fifteen = datetime.timedelta(minutes=15)

if elapsed >= fifteen:
    return True
else:
    return elapsed


2 commentaires

Quelle est la raison de l'utilisation de sleep (3)


@FurkanSiddiqui Je donne juste un exemple de dates datetime. Cela signifie que je viens de créer l'objet datetime 3 secondes après l'autre. Vous pouvez le changer à 15 ou plus et il retournera True.



0
votes
from datetime import timedelta


def check_time_diff(voted_datetime, current_datetime):
    time_diff = current_datetime - voted_datetime
    return True if time_diff > timedelta(minutes=15) else time_diff.seconds

0 commentaires