在Date :: Manip :: Delta_Format中显示天数的差异

时间:2014-03-07 22:37:49

标签: perl date

我正在计算相隔几天的2个日期之间的差异,但我从Delta_Format得到的结果显示了以小时为单位的日期。

print Delta_Format(DateCalc(ParseDate("2014-03-07 14:16:23"), ParseDate("2014-03-03 18:43:10")), 0, ("%Mv", "%dv", "%hv", "%mv", "%sv")) . "!\n";

给我这个输出:

0 0 -91 -33 -13!

这意味着零个月,零天,91小时,33分钟,13秒。如何让Delta_Format显示3天,19小时,33分钟,13秒?

1 个答案:

答案 0 :(得分:1)

基本上您正在尝试规范化Date::Manip::Delta。您可以在第4个参数中为DateCalc函数指定不同的模式,mode = 1是normalize。不幸的是,它的实现方式允许负值,而我不确定如何强制只是积极的。这就是为什么我从未以任何严肃的方式使用过这个模块的原因之一:)

use Date::Manip;

use strict;
use warnings;

my $date1 = ParseDate("2014-03-07 14:16:23");
my $date2 = ParseDate("2014-03-03 18:43:10");

my $delta = DateCalc($date2,$date1, \my $err, 1);

print Delta_Format($delta, "%Mv %dv %hv %mv %sv"); # 0 4 -4 -26 -47

使用Time :: Piece

的一种替代方案
use Time::Piece;

use strict;
use warnings;

my $tp1 = Time::Piece->strptime("2014-03-07 14:16:23", "%Y-%m-%d %H:%M:%S");
my $tp2 = Time::Piece->strptime("2014-03-03 18:43:10", "%Y-%m-%d %H:%M:%S");

my $diff = $tp1 - $tp2;

print $diff->pretty, "\n";  #3 days, 19 hours, 33 minutes, 13 seconds