1
0
mirror of https://github.com/emilk/egui.git synced 2026-06-26 14:49:06 -04:00
Files
egui/crates/egui_extras/src/datepicker/mod.rs
2025-12-19 20:34:18 +01:00

37 lines
1021 B
Rust

#![expect(clippy::unwrap_used)] // TODO(emilk): avoid unwraps
mod button;
mod popup;
pub use button::DatePickerButton;
use chrono::{Datelike as _, Duration, NaiveDate, Weekday};
#[derive(Debug)]
struct Week {
number: u8,
days: Vec<NaiveDate>,
}
fn month_data(year: i32, month: u32) -> Vec<Week> {
let first = NaiveDate::from_ymd_opt(year, month, 1).expect("Could not create NaiveDate");
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: std::mem::take(&mut week),
});
}
start = start.checked_add_signed(Duration::days(1)).unwrap();
}
weeks
}