Số ngày giữa hai ngày trong Python

Trong Python, thật đơn giản để tìm ngày giữa hai ngày trong python. Tất cả những gì bạn phải làm là trừ ngày bắt đầu với ngày cuối cùng. Kết quả sẽ là một đối tượng timedelta. Nếu bạn chỉ muốn số ngày giữa các ngày dwo là một giá trị số nguyên, thì bạn có thể sử dụng thuộc tính days của đối tượng timedelta để lấy số ngày ở dạng số nguyên. Đây là một ví dụ

## Difference between two dates
from datetime import date

# date objects
date_1 = date(year=2006, month=11, day=23)
date_2 = date(year=2005, month=3, day=1)

# difference between days
date_delta = date_1 - date_2        # date difference in timedelta data type
number_of_days = date_delta.days    # days in integer

print("\nDate difference: ", number_of_days, "\n")

Số ngày giữa hai ngày trong Python
Số ngày giữa hai ngày trong Python

Những bài viết liên quan

  • Cộng trừ đối tượng ngày giờ với đối tượng thời gian trong Python
  • Làm cách nào để chương trình Python ngủ trong vài micro giây?

Thẩm quyền giải quyết

  • Tìm hiểu thêm về đối tượng ngày trong mô-đun datetime tại

  • Nhấp để chia sẻ trên LinkedIn (Mở trong cửa sổ mới)
  • Bấm để chia sẻ trên Facebook (Opens in new window)
  • Nhấp để chia sẻ trên Twitter (Mở trong cửa sổ mới)
  • Nhấp để chia sẻ trên Reddit (Mở trong cửa sổ mới)
  • Nhấp để chia sẻ trên WhatsApp (Mở trong cửa sổ mới)
  • Nhấp để chia sẻ trên Pocket (Mở trong cửa sổ mới)
  • Nhấp để gửi email liên kết cho bạn bè (Mở trong cửa sổ mới)

Bạn cũng có thể thích

Chúng ta thường cần tính số ngày giữa hai ngày khi thực hiện phân tích dữ liệu bằng Python và pandas

Ngày giờ Python

Khi cần làm việc với dữ liệu có liên quan đến ngày tháng, thời gian, chúng ta thường sử dụng lớp datetime. Nó cung cấp nhiều chức năng thuận tiện để xử lý cả dữ liệu ngày và giờ. Datetime là thư viện tích hợp sẵn của Python nên không cần cài đặt

import datetime as dt

tdy = dt.datetime.today()
eoy = dt.datetime(2022,12,31)

print(tdy)
print(eoy)

2022-03-02 19:06:22.248996
2022-12-31 00:00:00

Chúng ta có thể sử dụng các toán tử đơn giản trực tiếp trên các đối tượng datetime. Kết quả là một đối tượng timedelta, có một thuộc tính gọi là ngày. Lưu ý bên dưới, chúng ta có thể xâu chuỗi phép tính và gọi thuộc tính

eoy - tdy
datetime.timedelta(days=303, seconds=17617, microseconds=751004)

(eoy - tdy).days
303

Với sự hiểu biết cơ bản này, bây giờ chúng ta hãy chuyển sang xử lý dữ liệu trong khung dữ liệu gấu trúc

Tính số ngày giữa các ngày trong Python Pandas

Tập dữ liệu mẫu

Chúng tôi có một tập dữ liệu đơn giản chỉ có hai cột, ngày có một số ngày khác nhau và date2 có ngày 01 tháng 12 năm 2022. Chúng tôi sẽ tính toán sự khác biệt giữa tất cả các ngày cho hai cột

import pandas as pd

df = pd.DataFrame({'date':['2021-12-01', '2022-01-01','2022-02-01','2022-03-01','2022-04-01','2022-05-01'],
                   'date2':['2022-12-01', '2022-12-01','2022-12-01','2022-12-01','2022-12-01','2022-12-01']})

	      date	     date2
0	2021-12-01	2022-12-01
1	2022-01-01	2022-12-01
2	2022-02-01	2022-12-01
3	2022-03-01	2022-12-01
4	2022-04-01	2022-12-01
5	2022-05-01	2022-12-01

Lưu ý cách chúng tôi tạo hai cột, dữ liệu trong cả hai cột đều là Chuỗi tại thời điểm này

Đầu tiên chúng ta cần chuyển các giá trị String này thành kiểu dữ liệu datetime để dễ dàng xử lý sau này

df['date'] = pd.to_datetime(df['date'])
df['date2'] = pd.to_datetime(df['date2'])

Hãy nhớ rằng chúng ta có thể truy cập các giá trị ngày giờ bên trong cột khung dữ liệu bằng trình truy cập dt?

df['diff'] = df['date2'].dt.date - df['date'].dt.date
df

	      date           date2	    diff
0	2021-12-01	2022-12-01	365 days
1	2022-01-01	2022-12-01	334 days
2	2022-02-01	2022-12-01	303 days
3	2022-03-01	2022-12-01	275 days
4	2022-04-01	2022-12-01	244 days
5	2022-05-01	2022-12-01	214 days

Thậm chí còn có một cách dễ dàng hơn để thực hiện việc này, chúng ta hoàn toàn không cần sử dụng bộ truy cập dt nếu chúng ta đã sử dụng các cột dtype datetime. Cột diff hiện chứa các đối tượng timedelta

Sau đó, để loại bỏ từ “ngày” và chỉ giữ lại phần số của cột khác, chúng ta có thể sử dụng dt. thuộc tính ngày

Chúng ta sẽ sử dụng gói datetime tích hợp, cho phép bạn thực sự dễ dàng làm việc với các đối tượng datetime trong Python

Vì datetime là một mô-đun tích hợp, bạn có thể truy cập nó ngay lập tức bằng cách nhập nó ở đầu tệp Python của bạn

Bạn có thể xây dựng các đối tượng datetime theo một số cách khác nhau

Có một số quy tắc nhất định phải tuân theo khi chuyển đổi Chuỗi thành Ngày giờ trong Python

Cố gắng đo số ngày giữa các ngày mà không sử dụng mô-đun datetime là một nhiệm vụ phức tạp - giữa việc tính toán năm nhuận và số ngày trong mỗi tháng, việc cố gắng tạo triển khai của riêng bạn là vô nghĩa

Tuy nhiên, với datetime, nó trở nên tầm thường

Bạn có thể chỉ cần trừ đi một

149 days, 5:22:52.255124
0 hoặc datetime với nhau để có được số ngày giữa chúng

from datetime import datetime

date1 = datetime.now()
date2 = datetime(day=1, month=7, year=2021)

timedelta = date2 - date1
print(timedelta)

Điều này trả về một đối tượng

149 days, 5:22:52.255124
2, chứa
149 days, 5:22:52.255124
3,
149 days, 5:22:52.255124
4 và
149 days, 5:22:52.255124
5 và biểu thị khoảng thời gian giữa hai đối tượng bất kỳ
149 days, 5:22:52.255124
0/
149 days, 5:22:52.255124
7 hoặc datetime

Việc in đối tượng này sẽ trả về ngày, giờ, phút, giây và micro giây cho sự kiện đó

149 days, 5:22:52.255124

Nếu bạn không quan tâm đến một số chỉ số này, bạn có thể chỉ định bạn muốn truy cập chỉ số nào trong số chúng bằng

149 days, 5:22:52.255124
9,
now = datetime.now()
new_years = datetime(day=1, month=1, year=2022)
countdown = new_years - now

print('Today is: ', now)
print('New Year is on: ', new_years)
print('Days until New Years: ', countdown.days)
0 và
now = datetime.now()
new_years = datetime(day=1, month=1, year=2022)
countdown = new_years - now

print('Today is: ', now)
print('New Year is on: ', new_years)
print('Days until New Years: ', countdown.days)
1

now = datetime.now()
new_years = datetime(day=1, month=1, year=2022)
countdown = new_years - now

print('Today is: ', now)
print('New Year is on: ', new_years)
print('Days until New Years: ', countdown.days)

Ở đây, chúng tôi đã chỉ định các ngày giữa

now = datetime.now()
new_years = datetime(day=1, month=1, year=2022)
countdown = new_years - now

print('Today is: ', now)
print('New Year is on: ', new_years)
print('Days until New Years: ', countdown.days)
2 và
now = datetime.now()
new_years = datetime(day=1, month=1, year=2022)
countdown = new_years - now

print('Today is: ', now)
print('New Year is on: ', new_years)
print('Days until New Years: ', countdown.days)
3 thành
now = datetime.now()
new_years = datetime(day=1, month=1, year=2022)
countdown = new_years - now

print('Today is: ', now)
print('New Year is on: ', new_years)
print('Days until New Years: ', countdown.days)
4, là một đối tượng
149 days, 5:22:52.255124
2

Sau đó, chúng ta có thể chỉ cần truy cập tham số

149 days, 5:22:52.255124
3 của đối tượng đó để lấy số ngày giữa chúng. Kết quả này trong

Today is:  2021-02-01 18:35:12.272524
New Year is on:  2022-01-01 00:00:00
Days until New Years:  333

Cộng và trừ ngày bằng TimeDelta

Điều gì sẽ xảy ra nếu thay vì cố gắng trừ hai ngày đã biết với nhau, bạn muốn cộng hoặc trừ một khung thời gian? . Bạn sẽ muốn nhắc họ gia hạn sau 30 ngày

Bạn có thể xây dựng khung thời gian cho 30 ngày đó, sử dụng

149 days, 5:22:52.255124
2 và cộng hoặc trừ khoảng thời gian đó với bất kỳ đối tượng datetime nào khác

Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó

from datetime import datetime, timedelta

now = datetime.now()
thirty_days = timedelta(days=30)

print('In 30 days: ', now + thirty_days)
print('30 days ago: ', now - thirty_days)

Kết quả này trong

In 30 days:  2021-03-03 18:41:49.922082
30 days ago:  2021-01-02 18:41:49.922082

Đây là một tính năng cực kỳ hữu ích khi cố gắng triển khai lập lịch hoặc truy xuất các mục nhập cơ sở dữ liệu dựa trên một cửa sổ đang di chuyển (chẳng hạn như 30 ngày tiếp theo)

Phần kết luận

Trong hướng dẫn này, chúng tôi đã đề cập đến mọi thứ bạn cần biết về cách lấy số ngày giữa hai ngày trong Python