如何计算perl中2个unix时间戳之间的天数?

时间:2013-04-22 03:58:04

标签: perl unix-timestamp

有多种简单的方法可以计算perl中两个unix时间戳之间的天数, 例如,$ time1 = 1366601846和$ time2 = 1366431011,因此输出为2天。

即使两个unix时间戳之间的差异只有两秒,也应该考虑为1天的差异。

之前感谢..

2 个答案:

答案 0 :(得分:4)

在欧洲/巴黎,这两个时间戳是

2013/04/20 06:10:11
2013/04/22 05:37:26

目前尚不清楚你想要什么。

在欧洲/巴黎,时间的差异是一天,23小时15分钟。圆满,那是2天。如果这是你想要的,你可以使用

use DateTime qw( );

my $dt1 = DateTime->from_epoch( epoch => 1366601846, time_zone => 'local' );
my $dt2 = DateTime->from_epoch( epoch => 1366431011, time_zone => 'local' );

my ($days, $minutes, $ns) = ($dt1 - $dt2)->in_units(qw( days minutes nanoseconds ));
++$days if $minutes || $ns;

print("$days\n");

在欧洲/巴黎,日历日期的差异在2天内。如果这是你想要的,你可以使用

use DateTime qw( );

my $dt1 = DateTime->from_epoch( epoch => 1366601846, time_zone => 'local' );
my $dt2 = DateTime->from_epoch( epoch => 1366431011, time_zone => 'local' );

my $days = $dt1->delta_days($dt2)->in_units('days');

print("$days\n");

除以24 * 60 * 60之外并不总是有用,无论你的意思是什么。在这两种情况下,答案取决于您指定的时区。

答案 1 :(得分:-2)

要获得两个unix(纪元)日期之间天数差异的浮点数,请尝试以下方法:

$days = abs ($time1 - $time2) / 86400;

Unix时间戳(或纪元时间戳)是自1970年1月1日12 AM UTC以来秒数的度量,因此原始差异是以秒为单位的差异。 86400是一天中的总秒数(60分钟* 60秒* 24小时),上面的结果是天数差异。

然而,仅这一点就会留下一个很长的浮点数,你可能想要用以下任何一个来减少: 来自Posix模块的ceil()或floor(),或者只是使用printf或sprintf来改变变量值本身:

printf("%.0f", $days);

$days = sprintf("%.0f", $days);