2011-04-22 93 views
1

對不起,我的英語不好。獲取列表年份和月份形式的日期之間的差異

我有兩個日期(日期時間):
latest_client = Client.objects.all().latest('id').ordered_at
first_client = Client.objects.order_by()[0].ordered_at

2011-04-22十五點27分28秒 - latest_client
2010-03-17 21:00:0 - first_client

我需要以列表年和月的形式獲取日期之間的差異:
2011(04,03,02,01)
2010(12,11,10,09,08,07,06,05 ,04,03)

請教算法,怎麼樣?

+0

1.從年/月轉換爲12 *年+月份指數值。 2.使用'範圍'。請對此進行編碼,**更新**問題,我們會評論您的工作情況。 – 2011-04-22 17:43:45

+0

已檢查datetime.timedelta ??? – 2011-04-22 17:44:31

+0

你需要完整的日期(例如'datetime.date(year,month,1)'')還是一個專門的結構(例如迭代'year,(month,month,month)''結構)? – 2011-04-22 17:57:38

回答

4

這裏是一個發電機,讓你跨越datetime.date()起點和終點之間的個月(含)

from datetime import date, datetime 
def spanning_months(start, end): 
    assert start <= end 
    current = start.year * 12 + start.month - 1 
    end = end.year * 12 + end.month - 1 
    while current <= end: 
     yield date(current // 12, current % 12 + 1, 1) 
     current += 1 

示範:

>>> latest = datetime(2011, 4, 22, 15, 27, 28) 
>>> first = datetime(2010, 3, 17, 21, 0, 0) 
>>> for d in spanning_months(first, latest): 
...  print d 
2010-03-01 
2010-04-01 
2010-05-01 
2010-06-01 
2010-07-01 
2010-08-01 
2010-09-01 
2010-10-01 
2010-11-01 
2010-12-01 
2011-01-01 
2011-02-01 
2011-03-01 
2011-04-01 
+0

非常感謝Martijn Pieters – Vladimir 2011-04-22 18:21:02

相關問題