use super::funejson::Value; use super::dates_add_days::parse_iso_date; const MONTHS: [&str; 12] = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; /// A date as a tick label for the interval it stands for. /// /// # Panics /// Panics on an invalid date or an unknown label. pub fn format_date(iso: &str, label: &str) -> String { let date = parse_iso_date(iso); let year = &iso[0..4]; let month = MONTHS[(date.month - 1) as usize]; match label { "day" | "week" => format!("{} {}", date.day, month), "month" => format!("{} {}", month, year), "quarter" => format!("Q{} {}", (date.month - 1) / 3 + 1, year), "year" => year.to_string(), other => panic!("unknown date label \"{}\"; use day, week, month, quarter or year", other), } } pub fn fune_vector(args: &[Value]) -> Value { Value::str(&format_date(args[0].as_str(), args[1].as_str())) }