Javascript 如何使用django计算python中的时间增量?
我被我的时间追踪应用程序卡住了。我将django与Python3一起使用。 此时,我正在计算两个datetime.datetime对象之间的时间差,并将其与datetime.combine组合 这是我的代码:Javascript 如何使用django计算python中的时间增量?,javascript,python,django,datetime,datepicker,Javascript,Python,Django,Datetime,Datepicker,我被我的时间追踪应用程序卡住了。我将django与Python3一起使用。 此时,我正在计算两个datetime.datetime对象之间的时间差,并将其与datetime.combine组合 这是我的代码: dt_start = datetime.combine(self.entry_date, self.entry_start_time) dt_end = datetime.combine(self.entry_date, self.entry_end_time) time_delta =
dt_start = datetime.combine(self.entry_date, self.entry_start_time)
dt_end = datetime.combine(self.entry_date, self.entry_end_time)
time_delta = dt_end - dt_start
time_delta = time_delta - timedelta(hours=t_daily.hour,minutes=t_daily.minute)
self.entry_time_delta = int(time_delta.total_seconds() // 60)
profile.overtime = + self.entry_time_delta
profile.save()
如您所见,我首先将输入项_date与输入项_start _time组合起来,以获得一个datetime.datetime对象。然后,我将输入项_date与输入项_end _time组合,以获得另一个datetime.datetime对象。不幸的是,不可能减去2个datetime.time对象
使用新的datetime.timedelta对象,我可以减去转换为timedelta对象的概要文件类中存储的每日工作时间,并将该时间差保存在概要文件的超时中
这对我来说太可怕了!稍后我想用timepicker/datepicker Javascript编写一个表单,我不知道是否遇到了问题,因为现在模型的entry\u start\u time和entry\u end\u time是models.TimeField对象。我看到的所有用于计时器和日期选择器的Javascript代码都希望表单中有一个文本字段
那么,如果我以后想使用timepicker/datepicker,那么在django/python中有没有计算时间的最佳实践呢
提前谢谢大家
编辑:
以下是我的课程:
class Entry(models.Model):
entry_date = models.DateField('entry date')
entry_start_time = models.TimeField('start time')
entry_end_time = models.TimeField('end time')
entry_vacation = models.BooleanField('took vacation', default=False)
entry_overhours = models.BooleanField('took overhours', default=False)
entry_time_delta = models.IntegerField('time difference today', editable=False)
user_id = models.ForeignKey(User)
def __str__(self):
return str(self.entry_date)
def save(self, *args, **kwargs):
''' Get work_time from Profile'''
profile = Profile.objects.get(user_id=self.user_id)
if profile.daily_work_time is not None:
t_daily = profile.daily_work_time
''' On save, calculate TimeDelta'''
if self.entry_vacation is True and self.entry_overhours is False:
self.entry_start_time = 0
self.entry_end_time = 0
self.entry_time_delta = 0
profile.actual_vacation_days = - 1
profile.save()
return super(Entry, self).save(*args, **kwargs)
if self.entry_overhours is True and self.entry_vacation is False:
self.entry_start_time = 0
self.entry_end_time = 0
self.entry_time_delta = 0 - timedelta(hours=t_daily.hour, minutes=t_daily.minute)
self.entry_time_delta = int(time_delta.total_seconds() // 60)
profile.overtime = + self.entry_time_delta
profile.save()
return super(Entry, self).save(*args, **kwargs)
if not self.entry_time_delta:
dt_start = datetime.combine(self.entry_date, self.entry_start_time)
dt_end = datetime.combine(self.entry_date, self.entry_end_time)
time_delta = dt_end - dt_start
time_delta = time_delta - timedelta(hours=t_daily.hour, minutes=t_daily.minute)
self.entry_time_delta = int(time_delta.total_seconds() // 60)
profile.overtime = + self.entry_time_delta
profile.save()
return super(Entry, self).save(*args, **kwargs)
class Meta:
unique_together = ("entry_date", "user_id")
class Profile(models.Model):
yearly_vacation_days = models.IntegerField('yearly vacation days')
actual_vacation_days = models.IntegerField('actual vacation days')
daily_work_time = models.TimeField('daily work time')
overtime = models.IntegerField('overall time')
user_id = models.ForeignKey(User)
现在还不清楚你要解决的确切问题是什么-你能更具体一点吗?我想避免所有这些datetime.combine只是为了得到对象,可以通过datetime.timedelta减去。我相信,有更好的方法来计算这些增量,例如时间戳,但我不知道,哪一种是最好的做法,或者至少是更好的做法。是什么阻止了您的模型有一个输入日期时间而不是一个单独的日期和时间字段?我想向用户显示他/她保存的所有日期的列表。因此,我使用输入日期将其与这一天的细节联系起来。此外,我可以确保使用unique_在一起的一天内没有重复的条目。如果有人在午夜工作会发生什么?