Hướng dẫn python check date in range - ngày kiểm tra python trong phạm vi

Tôi có một biến ngày: 2011-01-15 và tôi muốn lấy lại Boolean nếu ngày nói là trong vòng 3 ngày kể từ hôm nay. Tôi không hoàn toàn chắc chắn làm thế nào để xây dựng điều này trong Python. Tôi chỉ xử lý ngày, không phải DateTime.

Ví dụ làm việc của tôi là một "thời kỳ ân sủng". Người dùng đăng nhập vào trang web của tôi và nếu thời gian ân hạn trong vòng 3 ngày kể từ ngày hôm nay, các tập lệnh bổ sung, v.v. sẽ được bỏ qua cho người dùng đó.

Tôi biết bạn có thể làm một số điều lạ mắt/phức tạp trong (các) mô -đun ngày của Python nhưng tôi không chắc chắn nơi nào nên tìm.

hỏi ngày 14 tháng 1 năm 2011 lúc 20:29Jan 14, 2011 at 20:29

Hướng dẫn python check date in range - ngày kiểm tra python trong phạm vi

Ben Keatben KeatBen Keating

7.8569 huy hiệu vàng36 Huy hiệu bạc37 Huy hiệu đồng9 gold badges36 silver badges37 bronze badges

Trong Python để kiểm tra một phạm vi bạn có thể sử dụng a <= x <= b:

>>> import datetime
>>> today = datetime.date.today()
>>> margin = datetime.timedelta(days = 3)

>>> today - margin <= datetime.date(2011, 1, 15) <= today + margin
True

Đã trả lời ngày 14 tháng 1 năm 2011 lúc 20:35Jan 14, 2011 at 20:35

Mark Byersmark ByersMark Byers

786K188 Huy hiệu vàng1553 Huy hiệu bạc1440 Huy hiệu đồng188 gold badges1553 silver badges1440 bronze badges

1

Trừ hai đối tượng date cung cấp cho bạn một đối tượng timedelta mà bạn có thể so sánh với các đối tượng timedelta khác.

Ví dụ:

>>> from datetime import date, timedelta
>>> date(2011, 1, 15) - date.today()
datetime.timedelta(1)
>>> date(2011, 1, 15) - date.today() < timedelta(days = 3)
True
>>> date(2011, 1, 18) - date.today() < timedelta(days = 3)
False

Đối với "nơi nhìn": Tài liệu chính thức là tuyệt vời.

Đã trả lời ngày 14 tháng 1 năm 2011 lúc 20:33Jan 14, 2011 at 20:33

3

Những người khác đã trả lời đầy đủ hơn, vì vậy không cần bỏ phiếu cho câu trả lời này. (Sử dụng kỹ thuật được hiển thị trong câu trả lời của Mark Byers; +1 cho anh ta).
(Uses technique shown in Mark Byers' answer; +1 to him).

import datetime as dt

def within_days_from_today(the_date, num_days=7):
    '''
        return True if date between today and `num_days` from today
        return False otherwise

        >>> today = dt.date.today()
        >>> within_days_from_today(today - dt.timedelta(days=1), num_days=3)
        False
        >>> within_days_from_today(dt.date.today(), num_days=3)
        True
        >>> within_days_from_today(today + dt.timedelta(days=1), num_days=3)
        True
        >>> within_days_from_today(today + dt.timedelta(days=2), num_days=3)
        True
        >>> within_days_from_today(today + dt.timedelta(days=3), num_days=3)
        True
        >>> within_days_from_today(today + dt.timedelta(days=4), num_days=3)
        False
    '''
    lower_limit = dt.date.today()
    upper_limit = lower_limit + dt.timedelta(days=num_days)
    if lower_limit <= the_date <= upper_limit:
        return True
    else:
        return False

if __name__ == "__main__":
    import doctest
    doctest.testmod()

Đã trả lời ngày 14 tháng 1 năm 2011 lúc 21:01Jan 14, 2011 at 21:01

Hướng dẫn python check date in range - ngày kiểm tra python trong phạm vi

mechanical_meatmechanical_meatmechanical_meat

159K24 Huy hiệu vàng218 Huy hiệu bạc213 Huy hiệu đồng24 gold badges218 silver badges213 bronze badges

1

Giải pháp định hướng đối tượng

import datetime

class DatetimeRange:
    def __init__(self, dt1, dt2):
        self._dt1 = dt1
        self._dt2 = dt2

    def __contains__(self, dt):
        return self._dt1 < dt < self._dt2

dt1 = datetime.datetime.now()
dt2 = dt1 + datetime.timedelta(days = 2)
test_true = dt1 + datetime.timedelta(days = 1)
test_false = dt1 + datetime.timedelta(days = 5)

test_true in DatetimeRange(dt1, dt2) #Returns True
test_false in DatetimeRange(dt1, dt2) #Returns False

Jerther

5.3618 Huy hiệu vàng38 Huy hiệu bạc57 Huy hiệu Đồng8 gold badges38 silver badges57 bronze badges

Đã trả lời ngày 23 tháng 2 năm 2018 lúc 23:37Feb 23, 2018 at 23:37

mdornfe1mdornfe1mdornfe1

1.8821 Huy hiệu vàng23 Huy hiệu bạc41 Huy hiệu đồng1 gold badge23 silver badges41 bronze badges

1

Chuyển thời gian trôi qua thành ngày sau đó áp dụng một hoạt động ternary cho những ngày trôi qua

current_dt=datetime.now()
feed_dt = datetime.now()-timedelta(days=3)
from_dt=datetime(year=feed_dt.year,month=feed_dt.month,day=feed_dt.day)
days_elapsed=(current_dt-from_dt).days
print(True if days_elapsed <=3 else False)

Đầu ra: Đúng

Đã trả lời ngày 12 tháng 7 năm 2021 lúc 16:12Jul 12, 2021 at 16:12

Hướng dẫn python check date in range - ngày kiểm tra python trong phạm vi

Sư tử vàng vàngGolden Lion

3.2992 Huy hiệu vàng24 Huy hiệu bạc31 Huy hiệu Đồng2 gold badges24 silver badges31 bronze badges