#日期-时间 #时间 #日期 #年龄 #差异 #日期差异

不依赖std date-differencer

计算两个 DateTime 实例之间的时间间隔,并以年、月、日、小时、分钟、秒以及纳秒(而不是以不同单位表示相同的持续时间)的形式输出结果。此库适用于寿命检查和年龄计算。

4 个版本

0.1.3 2023年11月30日
0.1.2 2023年11月30日
0.1.1 2023年9月10日
0.1.0 2023年5月1日

#133 in 日期和时间

MIT 许可证

28KB
620 代码行

日期差异计算器

CI

计算两个 DateTime 实例之间的时间间隔,并以年、月、日、小时、分钟、秒以及纳秒(而不是以不同单位表示相同的持续时间)的形式输出结果。此库适用于寿命检查和年龄计算。

用法

use chrono::prelude::*;

use date_differencer::{date_diff, date_time_diff, add_date_time_diff};

let a = Local.with_ymd_and_hms(2022, 4, 6, 0, 0, 0).unwrap();
let b = Local.with_ymd_and_hms(2023, 6, 9, 1, 0, 0).unwrap();

println!("{:?}", date_diff(a, b));
/*
{
    "years": 1,
    "months": 2,
    "days": 3
}
*/

println!("{:?}", date_time_diff(a, b));
/*
{
    "years": 1,
    "months": 2,
    "days": 3,
    "hours": 1,
    "minutes": 0,
    "seconds": 0,
    "nanoseconds": 0
}
*/

println!("{}", add_date_time_diff(a, &date_time_diff(a, b)).unwrap()); // the same as b

此库可以正确处理闰年和月份中奇数/偶数天数。以下代码的结果可能有点令人困惑,但却是合理的。

use chrono::prelude::*;

use date_differencer::date_diff;

let a = Local.with_ymd_and_hms(2020, 2, 27, 0, 0, 0).unwrap();
let b = Local.with_ymd_and_hms(2021, 3, 1, 0, 0, 0).unwrap();

println!("{:?}", date_diff(a, b));
/*
{
    "years": 1,
    "months": 0,
    "days": 2
}

Explanation:
    1. 2020-02-27 + 1 year -> 2021-02-27
    2. 2021-02-27 + 2 days -> 2021-03-01 (2021-02 has 28 days)
*/

println!("{:?}", date_diff(b, a));
/*
{
    "years": -1,
    "months": 0,
    "days": -3
}

Explanation:
    1. 2021-03-01 - 1 year -> 2020-03-01
    2. 2020-03-01 - 3 days -> 2020-02-27 (2020-02 has 29 days)
*/

Crates.io

https://crates.io/crates/date-differencer

文档

https://docs.rs/date-differencer

许可证

MIT

依赖项

~1MB
~18K SLoC