2015-06-20 10 views
7

Chcę utworzyć listę dat z wartościami z STARTDATE do endDateJak utworzyć strumień oraz wykaz dat

Jest to coś podobnego do How to create a range of dates in R ale w Elixir.

Ponieważ lista może być duża lub czasami nieskończona (tzn. Nie ma daty zakończenia), chcę również wiedzieć, jak utworzyć strumień dat.

+2

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. –

+0

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. –

Odpowiedz

10
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.

+0

Nie działa z eliksirem 1.4 – Nomad