1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
use super::{DateTime, CarbonDuration, zeller_congurence}; pub struct Start<'a> { date_time: &'a DateTime } impl<'a> Start<'a> { pub fn new(dt: &'a DateTime) -> Start { Start { date_time: dt } } } impl<'a> CarbonDuration for Start<'a> { fn month(&self) -> DateTime { let mut copied_tm = self.date_time.tm; copied_tm.tm_mday = 1; copied_tm.tm_wday = zeller_congurence( self.date_time.tm.tm_year as f32, self.date_time.tm.tm_mon as f32, 1.0 ); match self.date_time.tm.tm_mon { 0 => copied_tm.tm_yday = 0, _ => { let mut yday = 0; for m in 0..self.date_time.tm.tm_mon { yday += self.date_time.days_in_month(m); } copied_tm.tm_yday = yday; } } DateTime::create_from_tm(copied_tm).start_of().day() } fn day(&self) -> DateTime { let mut copied_tm = self.date_time.tm; copied_tm.tm_hour = 0; DateTime::create_from_tm(copied_tm).start_of().hour() } fn hour(&self) -> DateTime { let mut copied_tm = self.date_time.tm; copied_tm.tm_min = 0; DateTime::create_from_tm(copied_tm).start_of().minute() } fn minute(&self) -> DateTime { let mut copied_tm = self.date_time.tm; copied_tm.tm_sec = 0; DateTime::create_from_tm(copied_tm).start_of().second() } fn second(&self) -> DateTime { let mut copied_tm = self.date_time.tm; copied_tm.tm_nsec = 0; DateTime::create_from_tm(copied_tm) } }