seatable / seatable-api-python

SeaTable Python API provide list/add/update/delete records in tables.
https://seatable.github.io/seatable-scripts/
Apache License 2.0
16 stars 8 forks source link

dateutils.hours() gives wrong answer #57

Open LadderOperator opened 2 years ago

LadderOperator commented 2 years ago

Following the official tutorial Python API and running dateutils.hours("2019-6-3 20:1:12", "2020-5-3 13:13:13") will give an answer of 8009, different from 8034 given by the tutorial.

LadderOperator commented 2 years ago

I think this part leads to the problem:

 def datediff(self, start, end, unit='S'):
        ...
        elif unit == 'H':
            delta_days = (dt_end - dt_start).days
            if delta_days == 0:
                return dt_end.hour - dt_start.hour
            return delta_days * 24 + (dt_end.hour - dt_start.hour)
       ...

delta_days == 0 means less than 24 hours. To check if they are the same day, something like start.day == end.day should be used instead. Similar mistake occurs when delta_days not equals to 0.

Since dateutils is implimented using datetime, this part can be improved:

td = dt_end - dt_start
delta = td.days * 24 + td.seconds / 3600
LadderOperator commented 2 years ago

OK, I think the datediff() (not only the hours()) function needs more check. Using more timedelta.days and timedelta.seconds could help making the code more clear to avoid bugs.