简体   繁体   中英

Time residual function in Python

I have 2 fields in the database: confirmed_at and preparation_time

I would like to get two simple functions that should return:

  • (a) the time residual and
  • (b) the % of time remaining.

This is my logic which I am trying to achieve:

  • when order is confirmed_at I update the database with datetime.now() and preparation_time is indicated in minutes and stored as integer (for example 5 min is stored as 5)

  • completed_time is confirmed_at + preparation_time

  • time_remaining is completed_time - now()

  • order status is completed_time / now() * 100

These are my functions but I cannot make them work:

def get_remaining_time(self):

    start_time = datetime(self.confirmed_at)

    end_time = (start_time + datetime.timedelta(0,self.preparation_time*60)).time() # days, seconds.

    return  end_time - datetime.now()

def get_order_status(self):
    end_time = (datetime(self.confirmed_at) + datetime.timedelta(0,self.preparation_time*60)).time()

    return end_time / datetime.now() * 100

What kind of type returned from functions? If it's timedelta - just turn it into date.

So here it is the solution that I've managed to work out

def get_remaining_time(self):

    start_time = self.confirmed_at

    end_time = start_time + timedelta(
        0, self.preparation_time * 60
    )  # days, seconds.

    return end_time - timezone.now()

def get_time_left(self):
    left = self.get_remaining_time()

    sec = int(left.total_seconds())
    if sec > 60:
        return "{} minutes".format(int(sec / 60))
    elif sec < 60 and sec > 0:
        return "{} seconds".format(sec)
    else:
        return 0

def get_order_status(self):

    left = int(self.get_remaining_time().total_seconds())
    if left < 0:
        return 100
    else:
        return round((1 - left / (self.preparation_time * 60)) * 100)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM