且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何计算Perl中两个日期之间的天数?

更新时间:2023-01-31 16:14:42

如果你关心准确性,记住,并不是所有的日子都有86400秒。基于这种假设的任何解决方案在某些情况下都是不正确的。

If you care about accuracy, keep in mind that not all days have 86400 seconds. Any solution based on that assumption will not be correct for some cases.

这是一个代码片段,我可以用几种不同的方法来计算和显示日期/时间差异,一个href =http://search.cpan.org/dist/DateTime/ =noreferrer> DateTime 库。打印的最后一个答案是你想要的答案。

Here's a snippet I keep around to calculate and display date/time differences a few different ways using the DateTime library. The last answer printed is the one you want, I think.

#!/usr/bin/perl -w

use strict;

use DateTime;
use DateTime::Format::Duration;

# XXX: Create your two dates here
my $d1 = DateTime->new(...);
my $d2 = DateTime->new(...);

my $dur = ($d1 > $d2 ? ($d1->subtract_datetime_absolute($d2)) : 
                       ($d2->subtract_datetime_absolute($d1)));

my $f = DateTime::Format::Duration->new(pattern => 
  '%Y years, %m months, %e days, %H hours, %M minutes, %S seconds');

print $f->format_duration($dur), "\n";

$dur = $d1->delta_md($d2);

my $dy = int($dur->delta_months / 12);
my $dm = $dur->delta_months % 12;
print "$dy years $dm months ", $dur->delta_days, " days\n";
print $dur->delta_months, " months ", $dur->delta_days, " days\n";
print $d1->delta_days($d2)->delta_days, " days\n";