有多种简单的方法可以计算perl中两个unix时间戳之间的天数, 例如,$ time1 = 1366601846和$ time2 = 1366431011,因此输出为2天。
即使两个unix时间戳之间的差异只有两秒,也应该考虑为1天的差异。
之前感谢..
答案 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);