## Introduction

When working with dates, times and durations in Python, it is common to use the timedelta object from the datetime library. This object represents a duration of time and can be used for calculations and comparisons between different dates. But how can we extract the number of days from a timedelta object ?

In this tutorial, we will explore different ways to accomplish this task using Python and the powerful `numpy`

library.

## Using the days attribute

The most straightforward way to extract the number of days from a `timedelta`

object is by accessing its `days`

attribute. This attribute contains the total number of days in the duration represented by the object. As an illustration, we can create two dates and calculate the difference between them using the datetime module:

`import datetime`

`start_date = datetime.date(2019, 8, 3)`

`end_date = datetime.date(2019, 8, 9)`

`delta = end_date - start_date`

Please note that calling

`type(delta)`

will return a timedelta object.

This code creates two datetime objects. Then, we calculate the difference between these two dates using the `-`

operator, which results in a `timedelta`

object. Finally, we can extract the number of days by accessing the `days`

attribute of the `delta`

object:

`delta.days`

will output the value

`6`

## Common error

One of the most common errors that people encounter is when they mistakenly use the "day" method instead of the "days" method on a timedelta object. This mistake leads to an

`delta.day`

`AttributeError: 'datetime.timedelta' object has no attribute 'day'`

It is important to remember that the correct attribute name is "days" and not "day."

## Using total_seconds()

Another way to extract the number of days from a `timedelta`

object is by converting it into a total number of days. This means that all the components in the duration, such as hours, minutes and seconds, will be converted into their equivalent value in days.

To do this conversion, we can use the total_seconds()`method of the`

timedelta` object and then divide the result by the total number of seconds in a day (86400):

`total_days = delta.total_seconds() / 86400`

`print( total_days )`

Output

`6.0`

Note that this conversion will always return a floating-point value, even if the duration is an exact number of days.

Another example

`import datetime`

`start_date = datetime.datetime(2019, 8, 3, 15, 30)`

`end_date = datetime.datetime(2019, 8, 9, 20, 42)`

`delta = end_date - start_date`

`total_days = delta.total_seconds() / 86400`

`print( total_days )`

Output

`6.216666666666667`

Please note that the datetime mentioned above is used specifically to create a datetime object with hours and minutes, rather than a date as previously mentioned.

## Working with a numpy array, which consists of dates

Please note that when working with arrays of dates, calculating the difference between two dates allows us to directly obtain the number of days that separate them.

### Example 1

`from numpy import timedelta64`

`D1 = np.array(['2019-07-23', '2019-08-03', '2019-08-29'], dtype='datetime64[D]')`

`D2 = np.array(['2019-07-15', '2019-08-22', '2019-08-29'], dtype='datetime64[D]')`

`DELTA = D2 - D1`

Ouput

`array([-8, 19, 0], dtype='timedelta64[D]')`

### Example 2

`from numpy import timedelta64`

`D1 = np.array(['2019-07-23T13:30', '2019-08-03T13:30', '2019-08-29T03:30'], dtype='datetime64')`

`D2 = np.array(['2019-07-15T17:30', '2019-08-22T03:30', '2019-08-29T03:30'], dtype='datetime64')`

`DELTA = D2 - D1`

Please note that in this case, the difference between the two dates is measured in minutes:

`array([-11280, 26760, 0], dtype='timedelta64[m]')`

If we wish to express it in terms of days, we can follow the following approach:

`DELTA.astype('int') * 1.0 / (24 * 60)`

gives

`array([-7.83333333, 18.58333333, 0. ])`

## References

Links | Site |
---|---|

datetime | docs.python.org |

How to add or subtract a certain number of days from a given date in python ? | moonbooks.org |