You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl使用DateTime模块获取带正负号的日期天数差方法

实现方案

DateTime 模块的 delta_days() 方法返回的差值默认是绝对值,要获取带正负符号的天数差,有两种常用实现方式:

方式1:基于原有delta_days逻辑加符号判断

DateTime对象重载了比较运算符,可以直接判断日期先后,给计算得到的绝对值加上对应符号即可:

sub delta_days {
    my $date1 = shift;
    my $date2 = shift;
    my $d1 = str_to_date_object($date1);
    my $d2 = str_to_date_object($date2);
    my $abs_days = $d2->delta_days($d1)->delta_days();
    # 日期更早的一方作为被减数时结果为负,反之为正
    return $d2 < $d1 ? -$abs_days : $abs_days;
}

# 测试输出
say delta_days('2021-10-21', '1980-8-20');  # -15037
say delta_days('1980-8-20',  '2021-10-21'); # 15037

方式2:儒略日直接相减(更简洁)

直接调用jd()方法获取日期对应的儒略日数值,两个值直接相减得到的就是天然带符号的天数差:

sub delta_days {
    my $date1 = shift;
    my $date2 = shift;
    my $d1 = str_to_date_object($date1);
    my $d2 = str_to_date_object($date2);
    return $d2->jd - $d1->jd;
}

两种方式都可以实现带正负标识的天数差计算,第二种实现更简洁高效。


内容的提问来源于stack exchange,提问作者con

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 08:15:06