2013-04-22 52 views
2

如何計算perl中兩個unix時間戳之間的天數有任何簡單的方法,例如: Ex,$ time1 = 1366601846和$ time2 = 1366431011,因此輸出爲2天。如何計算perl中2個unix時間戳之間的天數?

即使兩個unix時間戳之間的差異只有兩秒鐘,也應該考慮爲1天的差異。

之前謝謝..

+0

難道你不能把差異除以24 * 60 * 60 – anthonybell 2013-04-22 04:00:05

+0

正如你所說,有很簡單的方法來做到這一點。你還在找什麼? – stevenl 2013-04-22 04:32:23

+1

您是否在尋找日期差異?如果是這樣,日期在哪裏? (「本地」是可以接受的答案。) – ikegami 2013-04-22 04:34:49

回答

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分割並不總是去上班,上面你的意思爲準。在這兩種情況下,答案取決於您指定的時區。

+0

謝謝,它的作品。我只需要第二個。 – 2013-04-22 05:17:56

-2

拿到兩UNIX(時代)日期之間天差的浮點數,試試這個:

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

Unix的時間戳(或紀元時間戳)是自1970年1月1日上午12點UTC以來的秒數,因此原始差異是以秒爲單位的差異。 86400是一天中的總秒數(60分鐘* 60秒* 24小時),上面的結果是天數的差異。

但是,僅此一項就會使您得到一個長浮點數,您可能希望通過Posix模塊的 ceil()或floor()修剪掉,或者使用printf或sprintf來更改變量值本身:

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

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

+4

24 * 60 * 60不是一天中的秒數。有些日子有更多,有些更少。 – ikegami 2013-04-22 04:33:42