start_date = Calendar.Date.from_erl!({2014,12,27})
date_stream = Stream.iterate(start_date, &(Calendar.Date.next_day!(&1)))
Enum.take(date_stream, 10)
#=>
[%Calendar.Date{day: 27, month: 12, year: 2014},
%Calendar.Date{day: 28, month: 12, year: 2014},
%Calendar.Date{day: 29, month: 12, year: 2014},
%Calendar.Date{day: 30, month: 12, year: 2014},
%Calendar.Date{day: 31, month: 12, year: 2014},
%Calendar.Date{day: 1, month: 1, year: 2015},
%Calendar.Date{day: 2, month: 1, year: 2015},
%Calendar.Date{day: 3, month: 1, year: 2015},
%Calendar.Date{day: 4, month: 1, year: 2015},
%Calendar.Date{day: 5, month: 1, year: 2015}]
dziękuje José Valim za wskazanie we właściwym kierunku.
Możesz zajrzeć do 'Stream.iterate/2'. Dałbyś mu wartość początkową i funkcję, która przyjmuje aktualną datę i emituje następną. Następnie, aby uzyskać 100 dni, możesz nazwać go "Enum.take (date_stream, 100)". Moduł kalendarza w Erlang lub biblioteki takie jak Timex i Calends mogą pomóc w operowaniu datami. –
Jest jeszcze jedna dyskusja na temat tego właśnie pytania, zarówno [tutaj] (http://onor.io/2014/11/07/athena-code/) i [tutaj] (http://codereview.stackexchange.com/questions/ 69120/generujące-wszystkie-ważne-daty), niezależnie od tego, ile to jest warte. –