Получите разницу между датами в виде списка лет и месяцев

1

Извините за мой английский.

У меня есть две даты (DateTime):
latest_client = Client.objects.all().latest('id').ordered_at
first_client = Client.objects.order_by()[0].ordered_at

2011-04-22 15: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. Используйте range . Пожалуйста, напишите это, обновите вопрос, и мы прокомментируем, насколько хорошо вы справились.
  • 0
    проверил datetime.timedelta ???
Показать ещё 3 комментария
Теги:
datetime
date

1 ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню