Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 计算两个日期之间的天数(不使用模块)_Perl_Date - Fatal编程技术网

Perl 计算两个日期之间的天数(不使用模块)

Perl 计算两个日期之间的天数(不使用模块),perl,date,Perl,Date,我搜索了很多,似乎所有的解决方案都在使用某个模块 我有两个yyyymmdd格式的日期。我想知道一个简单的方法来计算这些日期之间的天数,而不使用任何模块 例如: 日期1:20130625 日期2:20130705 天数=10天 PS:由于运行脚本的服务器受到限制,我无法使用任何模块。Perl版本-5.8.4表达式返回10 ( Time::Piece->strptime('20130705', '%Y%m%d') - Time::Piece->strptime('201306

我搜索了很多,似乎所有的解决方案都在使用某个模块

我有两个yyyymmdd格式的日期。我想知道一个简单的方法来计算这些日期之间的天数,而不使用任何模块

例如: 日期1:20130625 日期2:20130705

天数=10天

PS:由于运行脚本的服务器受到限制,我无法使用任何模块。Perl版本-5.8.4

表达式返回10

(
    Time::Piece->strptime('20130705', '%Y%m%d')
  - Time::Piece->strptime('20130625', '%Y%m%d')
)->days
是核心Perl发行版的一部分。

它很简单:

每个日期1个:

1.1年复一年

1.2将月变为日

1.3求和天数+mdays+ydays


2减去这两个值

此操作所需的所有模块都不需要任何编译,可以使用与上载perl脚本相同的方法。这并不考虑安装的perl版本,默认情况下,perl版本可能已经安装了所需的大部分模块。你能指定哪个模块吗?使用Time::Local是否可以做到这一点?您使用的Perl版本已超过8年,不受支持。您还说不能使用CPAN——这是Perl的最大威力。我强烈建议您在尝试执行任何工作之前,为自己准备一个合理的工作环境:-该脚本将部署在多个实时且业务极其关键的服务器上,这些服务器非常旧,并且由另一个团队配置。做任何种类的修改,比如添加perl库,都意味着审批的巨大管理开销——我只是想避免所有这些,并以另一种方式完成这项工作。我相信你能理解:-如果你没有,你可以一直复制/粘贴它的源代码到你的脚本中。基本上,您只需要_daygm,它只有大约10行长。我以前应该提到过这一点,但我的perl版本是5.8.4,它不识别这个模块:为什么您使用的是过时且不受支持的perl版本?我正在搜索关于代码复制的注释,但没有一点:
sub yyyymmdd_to_rata_die {
    use integer;
    my ( $y, $m, $d ) = $_[0] =~ /\A([0-9]{4})([0-9]{2})([0-9]{2})\z/
        or return;

    my $adj;

    # make month in range 3..14 (treat Jan & Feb as months 13..14 of prev year)
    if ( $m <= 2 ) {
        $y -= ( $adj = ( 14 - $m ) / 12 );
        $m += 12 * $adj;
    }
    elsif ( $m > 14 ) {
        $y += ( $adj = ( $m - 3 ) / 12 );
        $m -= 12 * $adj;
    }

    # add: day of month, days of previous 0-11 month period that began w/March,
    # days of previous 0-399 year period that began w/March of a 400-multiple
    # year), days of any 400-year periods before that, and 306 days to adjust
    # from Mar 1, year 0-relative to Jan 1, year 1-relative (whew)

    $d += ( $m * 367 - 1094 ) / 12 + $y % 100 * 1461 / 4 + ( $y / 100 * 36524 + $y / 400 ) - 306;
}

print yyyymmdd_to_rata_die(20130705) - yyyymmdd_to_rata_die(20130625);