我试图计算从数据库中提取的两个日期之间的日历天数.我认为将日期转换为秒将是一个简单而正确的解决方案.
- #!/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