Getting all items less than a month old

后端 未结 3 2047
北海茫月
北海茫月 2021-02-18 13:05

Is there a way to get all objects with a date less than a month ago in django.

Something like:

items = Item.objects.filter(less than a month old).order_b         


        
相关标签:
3条回答
  • 2021-02-18 13:29
    items = Item.objects.filter(created_date__gte=aMonthAgo)
    

    Where aMonthAgo would be calculated by datetime and timedelta.

    0 讨论(0)
  • 2021-02-18 13:33

    What is your definition of a "month"? 30 days? 31 days? Past that, this should do it:

    from datetime import datetime, timedelta
    last_month = datetime.today() - timedelta(days=30)
    items = Item.objects.filter(my_date__gte=last_month).order_by(...)
    

    Takes advantange of the gte field lookup.

    0 讨论(0)
  • 2021-02-18 13:41

    Do this:

    from datetime import datetime, timedelta
    
    def is_leap_year(year): 
        if (year % 4) == 0: 
            if (year % 100) == 0: 
                if (year % 400) == 0: 
                    return True
                else: 
                    return False
            else: 
                 return True
        else: 
            return False
    
    def get_lapse():
        last_month = datetime.today().month
        current_year = datetime.today().year
    
        #is last month a month with 30 days?
        if last_month in [9, 4, 6, 11]:
            lapse = 30
    
        #is last month a month with 31 days?
        elif last_month in [1, 3, 5, 7, 8, 10, 12]:
            lapse = 31
    
        #is last month February?
        else:
            if is_leap_year(current_year):
                lapse = 29
            else:
                lapse = 30
    
        return lapse
    
    last_month_filter = datetime.today() - timedelta(days=get_lapse())
    
    items = Item.objects.filter(date_created__gte=last_month_filter)
    

    This will cater for all cases I can think of.

    0 讨论(0)
提交回复
热议问题