Джанго - разница по времени - PullRequest
0 голосов
/ 17 декабря 2018

Я хотел бы сравнить два поля времени, чтобы получить разницу в часах и минутах.

class Labor(models.Model):
    id = models.AutoField(primary_key=True)
    start_hour = models.TimeField(null=True)
    end_hour = models.TimeField(null=True)

    def hours(self):
        return self.end_hour - self.start_hour 

Но, если попытаться использовать метод hours, django выдает это исключение:

unsupported operand type(s) for -: 'datetime.time' and 'datetime.time'

Хотелось бы, чтобы разница возвращала мне что-то вроде этого:

10: 00 ~ 11:30 = 1: 30

11: 30 ~ 11:45 = 0:15

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 09 августа 2019

Если вы не хотите, чтобы ваши поля были DateTimeField s, вы можете просто сделать небольшую математику (предполагая, что ваше время в тот же день).

def hours(self):
    end_minutes = self.end_hour.hour*60 + 
    self.end_hour.minute
    start_minutes = self. start_hour.hour*60 + self.start_hour.minute
    return (end_minutes - start_minutes) / 60

Это вернет число с плавающей запятой, но вы всегда можете округлить значение.Вы также можете проверить, что self.end_hour больше self.start_hour.

0 голосов
/ 17 декабря 2018

Сначала сделайте поля как DateTimeField, как упомянуто @Chiefir, это даст вам объект datetime.

затем

def hours(self):
        c = self.end_time - self.start_time
        print(c.seconds) 
        # Write your logic to convert seconds to hours.
...