2

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

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

之前谢谢。。

4

2 回答 2

4

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

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

不清楚你想要什么。

在欧洲/巴黎,时差为 1 天 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 并不总是有效,无论您的意思是什么。在这两种情况下,答案都取决于您指定的时区。

于 2013-04-22T04:53:20.903 回答
-2

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

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

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

但是,仅此一项就会给您留下一个长浮点数,您可能希望使用 Posix 模块中的 ceil() 或 floor() 来修剪它,或者简单地使用 printf 或 sprintf 来更改变量值本身:

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

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

于 2013-04-22T04:19:42.597 回答