use chrono::{NaiveDate, Utc}; use chrono::Datelike; #[derive(Debug)] pub struct DateRange { start_year : i32, start_month : u32, end_year : i32, end_month : u32, } impl DateRange { pub fn new(start : chrono::NaiveDate, end : chrono::NaiveDate) -> DateRange { DateRange { start_year : start.year(), start_month : start.month(), end_year : end.year(), end_month : end.month(), } } } impl Iterator for DateRange { type Item = chrono::NaiveDate; fn next(&mut self) -> Option { println!("next called"); if (self.start_year <= self.end_year) { if(self.start_month <= self.end_month) { let mut tmp = self.start_year.to_string(); if self.start_month < 10 { tmp.push_str("-0"); } else { tmp.push_str("-"); } tmp.push_str(&self.start_month.to_string()); tmp.push_str("-01"); if self.start_month < 13 { self.start_month = self.start_month + 1; } else { self.start_month = 1; self.start_year = self.start_year + 1; } println!("{}", tmp); return Some(chrono::NaiveDate::parse_from_str(&tmp, "%Y-%m-%d").unwrap()) } } None } }