#date #calendar #excel #business #workday

workdays

一个受 Excel 中 WORKDAY 函数启发的 Rust 库,用于计算工作日和处理工作日历。

2 个版本

新版本 0.1.1 2024 年 8 月 22 日
0.1.0 2024 年 8 月 22 日

#140 in 日期和时间

MIT 许可证

23KB
254 代码行

工作日

workdays 是一个 Rust 库,用于计算工作日和处理工作日历,受 Excel 中的 WORKDAY 函数启发。它提供了定义自定义工作周、添加假日以及基于给定的工作日数计算日期的功能。

特性

  • 基于工作日计算结束日期
  • 计算两个日期之间的工作日数
  • 解析和处理工作日历配置(YAML 或 JSON)
  • 支持自定义工作日和假日
  • 灵活的工作日解析

安装

workdays 添加到您的 Cargo.toml 中的依赖项

cargo add workdays

使用

以下是一个快速示例

use workdays::WorkCalendar;
use chrono::NaiveDate;
use std::str::FromStr;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut calendar = WorkCalendar::new();
    calendar.add_holiday(NaiveDate::from_ymd_opt(2023, 12, 25).unwrap());
    calendar.set_work_days("Mon,Tue,Wed,Thu,Fri")?;

    let start_date = NaiveDate::from_ymd_opt(2023, 8, 21).unwrap();
    let days_worked = 20;

    let (end_date, calendar_duration) = calendar.compute_end_date(start_date, days_worked)?;
    println!("End date: {}", end_date);
    println!("Calendar duration: {} days", calendar_duration.num_days());

    // Using FromStr to create a WorkCalendar from YAML or JSON
    let config = r#"
    work_days:
      - Monday
      - Tuesday
      - Wednesday
    holidays:
      - 2023-12-25
    "#;
    let custom_calendar = WorkCalendar::from_str(config)?;
    println!("Is Monday a work day? {}", custom_calendar.is_work_day(&chrono::Weekday::Mon));

    Ok(())
}

许可证

本项目采用 MIT 许可证 - 有关详细信息,请参阅 LICENSE 文件。

贡献

欢迎贡献!请随时提交拉取请求。

致谢

  • 受 Excel 中的 WORKDAY 函数启发

依赖项

~3–4.5MB
~87K SLoC