egui/egui_extras/src/datepicker.rs

35 lines
943 B
Rust
Raw Normal View History

2022-01-09 20:56:58 +00:00
mod button;
mod popup;
2021-12-17 14:48:45 +00:00
2022-01-09 20:56:58 +00:00
pub use button::DatePickerButton;
2021-12-17 14:33:29 +00:00
use chrono::{Date, Datelike, Duration, NaiveDate, Utc, Weekday};
2021-12-17 14:48:45 +00:00
2021-12-17 14:33:29 +00:00
#[derive(Debug)]
struct Week {
number: u8,
days: Vec<Date<Utc>>,
}
fn month_data(year: i32, month: u32) -> Vec<Week> {
let first = Date::from_utc(NaiveDate::from_ymd(year, month, 1), Utc);
let mut start = first;
while start.weekday() != Weekday::Mon {
start = start.checked_sub_signed(Duration::days(1)).unwrap();
}
let mut weeks = vec![];
let mut week = vec![];
while start < first || start.month() == first.month() || start.weekday() != Weekday::Mon {
week.push(start);
if start.weekday() == Weekday::Sun {
weeks.push(Week {
number: start.iso_week().week() as u8,
days: week.drain(..).collect(),
});
}
start = start.checked_add_signed(Duration::days(1)).unwrap();
}
weeks
}