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 End<'a> { date_time: &'a DateTime } impl<'a> End<'a> { pub fn new(dt: &'a DateTime) -> End { End { date_time: dt } } } impl<'a> CarbonDuration for End<'a> { fn month(&self) -> DateTime { let mut copied_tm = self.date_time.tm; copied_tm.tm_mday = self.date_time.days_in_month(self.date_time.tm.tm_mon); copied_tm.tm_wday = zeller_congurence( self.date_time.tm.tm_year as f32, self.date_time.tm.tm_mon as f32, copied_tm.tm_mday as f32 ); match self.date_time.tm.tm_mon { 0 => copied_tm.tm_yday = self.date_time.days_in_month(0) - 1, _ => { let mut yday = 0; for month in 0..self.date_time.tm.tm_mon + 1 { yday += self.date_time.days_in_month(month); } copied_tm.tm_yday = yday - 1; } } DateTime::create_from_tm(copied_tm).end_of().day() } fn day(&self) -> DateTime { let mut copied_tm = self.date_time.tm; copied_tm.tm_hour = 23; DateTime::create_from_tm(copied_tm).end_of().hour() } fn hour(&self) -> DateTime { let mut copied_tm = self.date_time.tm; copied_tm.tm_min = 59; DateTime::create_from_tm(copied_tm).end_of().minute() } fn minute(&self) -> DateTime { let mut copied_tm = self.date_time.tm; copied_tm.tm_sec = 59; DateTime::create_from_tm(copied_tm).end_of().second() } fn second(&self) -> DateTime { let mut copied_tm = self.date_time.tm; copied_tm.tm_nsec = 999999999; DateTime::create_from_tm(copied_tm) } }