我试图计算从数据库中提取的两个日期之间的日历天数.我认为将日期转换为秒将是一个简单而正确的解决方案.
#!/usr/bin/perl use warnings; use strict; use POSIX qw(strftime); use Date::Parse; my $minDate = "2016-03-27"; my $maxDate = "2016-06-15"; print "Format as extracted from db: mindate: $minDate and maxdate: $maxDate\n"; my ($dbYear,$dbMonth,$dbDay) = split ('-',$minDate); my $datum = "$dbYear$dbMonth$dbDay"; my $minDateSec = str2time($datum); ($dbYear,$maxDate); $datum = "$dbYear$dbMonth$dbDay"; my $maxDateSec = str2time($datum); my $numCalDaysSec = ($maxDateSec-$minDateSec)/86400; print "Min date in Seconds: $minDateSec\n"; print "Max date in Seconds: $maxDateSec\n"; print "Num days: $numCalDaysSec\n";
最初,我认为这种方法为我提供了可靠的结果:
bash-3.2$./testNumDays.pl As extracted from db: mindate: 2016-06-14 and maxdate: 2016-06-15 Min date in Seconds: 1465855200 Max date in Seconds: 1465941600 Num days: 1 bash-3.2$./testNumDays.pl As extracted from db: mindate: 2016-05-31 and maxdate: 2016-06-15 Min date in Seconds: 1464645600 Max date in Seconds: 1465941600 Num days: 15 bash-3.2$./testNumDays.pl As extracted from db: mindate: 2016-03-28 and maxdate: 2016-06-15 Min date in Seconds: 1459116000 Max date in Seconds: 1465941600 Num days: 79 bash-3.2$./testNumDays.pl As extracted from db: mindate: 2016-03-27 and maxdate: 2016-06-15 Min date in Seconds: 1459033200 Max date in Seconds: 1465941600 Num days: 79.9583333333333 bash-3.2$
显然,日期之间的日历日期数应该是整数.嗯,我做错了什么?为什么转换为秒不可靠?
由于我是一个Perl新手,我可能会忽略这一点.因此,非常欢迎任何帮助.
解决方法
一种方法是使用
Time::Piece核心模块:
use warnings; use strict; use Time::Piece qw(); my $t1 = Time::Piece->strptime('2016-03-27','%Y-%m-%d'); my $t2 = Time::Piece->strptime('2016-06-15','%Y-%m-%d'); my $seconds = $t2 - $t1; print $seconds->days(),"\n"; __END__ 80