software

2004年10月26日3時45分と書かれても、それが今からどれぐらい過去なのかをさっとイメージするのは難しい。そこで、現在を基準とした、より体感的な時刻表現を試みる。

コーディング例(Perl)

#!/usr/bin/env perl

sub deltatime{
    my ( $time ) = @_;
    my $now = time;

    my ($sec, $min, $hour, $mday, $mon, $year) = localtime($time);
    my ($secnow, $minnow, $hournow, $mdaynow, $monnow, $yearnow) = localtime($now);
    $mon++;
    $monnow++;
    $year += 1900;
    $yearnow += 1900;

    my $deltatime = $now - $time;
    my $timestring;

    if ( $deltatime < 60 ){
    $deltatime = int( $deltatime );
    $timestring = "$deltatime秒前";
    }
    elsif ( $deltatime < 3600 ){
    $deltatime = int( $deltatime / 60 );
    $timestring = "$deltatime分前";
    }
    elsif ( $deltatime < 86400 ){
    $deltatime = int( $deltatime / 3600 );
    $timestring = "$deltatime時間前";
    if ( $mday != $mdaynow ){
        $timestring .= "(昨日の$hour時)";
    }
    }
    elsif ( $monnow == $mon && $yearnow == $year ){
    $timestring = ( $mdaynow - $mday ) . "日前(今月$mday日)$hour時";
    }
    elsif ( $yearnow == $year ){
    $timestring = "$mon月$mday日$hour時";
    }
    else{
    $timestring = "$year年$mon月$mday日";
    }
    $timestring;
}

for(my $i=1; $i<100000000; $i*=1.3){
    print deltatime( time - $i ), "=$i?n";
}

実行例

1秒前=1
1秒前=1.3
1秒前=1.69
2秒前=2.197
2秒前=2.8561
3秒前=3.71293
4秒前=4.826809
6秒前=6.2748517
8秒前=8.15730721
10秒前=10.604499373
13秒前=13.7858491849
17秒前=17.92160394037
23秒前=23.298085122481
30秒前=30.2875106592253
39秒前=39.3737638569929
51秒前=51.1858930140908
1分前=66.541660918318
1分前=86.5041591938135
1分前=112.455406951958
2分前=146.192029037545
3分前=190.049637748808
4分前=247.064529073451
5分前=321.183887795486
6分前=417.539054134132
9分前=542.800770374371
11分前=705.641001486683
15分前=917.333301932687
19分前=1192.53329251249
25分前=1550.29328026624
33分前=2015.38126434611
43分前=2619.99564364995
56分前=3405.99433674493
1時間前(昨日の23時)=4427.79263776841
1時間前(昨日の23時)=5756.13042909894
2時間前(昨日の22時)=7482.96955782862
2時間前(昨日の22時)=9727.86042517721
3時間前(昨日の21時)=12646.2185527304
4時間前(昨日の20時)=16440.0841185495
5時間前(昨日の19時)=21372.1093541143
7時間前(昨日の17時)=27783.7421603486
10時間前(昨日の15時)=36118.8648084532
13時間前(昨日の12時)=46954.5242509892
16時間前(昨日の8時)=61040.8815262859
22時間前(昨日の3時)=79353.1459841717
2日前(今月25日)20時=103159.089779423
2日前(今月25日)11時=134106.81671325
2日前(今月25日)0時=174338.861727225
3日前(今月24日)10時=226640.520245393
4日前(今月23日)15時=294632.676319011
5日前(今月22日)14時=383022.479214714
6日前(今月21日)6時=497929.222979128
8日前(今月19日)13時=647307.989872867
10日前(今月17日)7時=841500.386834727
13日前(今月14日)9時=1093950.50288515
17日前(今月10日)14時=1422135.65375069
22日前(今月5日)15時=1848776.3498759
9月29日5時=2403409.25483866
9月20日21時=3124432.03129026
9月10日0時=4061761.64067734
8月26日22時=5280290.13288055
8月8日14時=6864377.17274471
7月15日18時=8923690.32456812
6月14日18時=11600797.4219386
5月5日11時=15081036.6485201
3月14日3時=19605347.6430762
1月6日1時=25486951.935999
2003年10月9日=33133037.5167987
2003年6月16日=43072948.7718383
2003年1月17日=55994833.4033898
2002年7月7日=72793283.4244068
2001年10月27日=94631268.4517289

Linked from


Edit