2015-06-20 19 views
7

Tôi muốn tạo ra một danh sách các ngày với các giá trị từ STARTDATE đến ENDDATELàm thế nào để tạo ra một dòng suối và danh sách các ngày

Đây là một cái gì đó tương tự như How to create a range of dates in R nhưng trong Elixir.

Vì danh sách có thể lớn hoặc đôi khi vô hạn (tức là, không có ngày kết thúc), tôi cũng muốn biết cách tạo luồng ngày.

+2

Bạn có thể xem xét 'Stream.iterate/2'. Bạn sẽ cung cấp cho nó một giá trị ban đầu và một chức năng mà có ngày hiện tại và phát ra một kế tiếp. Sau đó, để có được 100 ngày bạn có thể gọi 'Enum.take (date_stream, 100) 'trên đó. Mô đun lịch trong Erlang hoặc các thư viện như Timex và Calends có thể trợ giúp với các hoạt động ngày tháng. –

+0

Có một số thảo luận thêm về chính xác câu hỏi này cả [ở đây] (http://onor.io/2014/11/07/athena-code/) và [tại đây] (http://codereview.stackexchange.com/questions/ 69120/tạo-tất cả-hợp lệ-ngày) cho bất cứ điều gì nó có giá trị. –

Trả lời

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}] 

cảm ơn José Valim vì đã đi đúng hướng.

+0

Không hoạt động với elixir 1.4 – Nomad

Các vấn đề liên quan