function _DateInterval( vv ) { var bb = 140*24*60*60*1000; //140 days if( vv >= bb ) { //140 days < 5 months bb = 8766*60*60*1000;//1 year if( vv < bb ) return( bb/12 ); // 1 year //1 month if( vv < bb *2 ) return( bb/6 ); // 2 years //2 month if( vv < bb *5/2 ) return( bb/4 ); // 2.5 years //3 month if( vv < bb *5 ) return( bb/2 ); // 5 years //6 month if( vv < bb *10 ) return( bb ); // 10 years //1 year if( vv < bb *20 ) return( bb*2 ); // 20 years //2 years if( vv < bb *50 ) return( bb*5 ); // 50 years //5 years if( vv < bb *100 ) return( bb*10 ); // 100 years //10 years if( vv < bb *200 ) return( bb*20 ); // 200 years //20 years if( vv < bb *500 ) return( bb*50 ); // 500 years //50 years return( bb*100 ); //100 years } bb /= 2; //70 days if( vv >= bb ) return( bb/5 ); //14 days bb /= 2; //35 days if( vv >= bb ) return( bb/5 ); //7 days bb /= 7; bb *= 4; //20 days if( vv >= bb ) return( bb/5 ); //4 days bb /= 2; //10 days if( vv >= bb ) return( bb/5 ); //2 days bb /= 2; //5 days if( vv >= bb ) return( bb/5 ); //1 day bb /= 2; //2.5 days if( vv >= bb ) return( bb/5 ); //12 hours bb *= 3; bb /= 5; //1.5 day if( vv >= bb ) return( bb/6 ); //6 hours bb /= 2; //18 hours if( vv >= bb ) return( bb/6 ); //3 hours bb *= 2; bb /= 3; //12 hours if( vv >= bb ) return( bb/6 ); //2 hours bb /= 2; //6 hours if( vv >= bb ) return( bb/6 ); //1 hour bb /= 2; //3 hours if( vv >= bb ) return( bb/6 ); //30 mins bb /= 2; //1.5 hours if( vv >= bb ) return( bb/6 ); //15 mins bb *= 2; bb /= 3; //1 hour if( vv >= bb ) return( bb/6 ); //10 mins bb /= 3; //20 mins if( vv >= bb ) return( bb/4 ); //5 mins bb /= 2; //10 mins if( vv >= bb ) return( bb/5 ); //2 mins bb /= 2; //5 mins if( vv >= bb ) return( bb/5 ); //1 min bb *= 3; bb /= 2; //3 mins if( vv >= bb ) return( bb/6 ); //30 secs bb /= 2; //1.5 mins if( vv >= bb ) return( bb/6 ); //15 secs bb *= 2; bb /= 3; //1 min if( vv >= bb ) return( bb/6 ); //10 secs bb /= 3; //20 secs if( vv >= bb ) return( bb/4 ); //5 secs bb /= 2; //10 secs if( vv >= bb ) return( bb/5 ); //2 secs return( bb/10 ); //1 sec } #### #! perl -slw use strict; sub func { my $vv = shift; my $bb = 140*24*60*60*1000; ##140 days if( $vv >= $bb ) { ##140 days < 5 months $bb = 8766*60*60*1000;##1 year if( $vv < $bb ) { return( $bb/12 ); } ## 1 year ##1 month if( $vv < $bb *2 ) { return( $bb/6 ); } ## 2 years ##2 month if( $vv < $bb *5/2 ) { return( $bb/4 ); } ## 2.5 years ##3 month if( $vv < $bb *5 ) { return( $bb/2 ); } ## 5 years ##6 month if( $vv < $bb *10 ) { return( $bb ); } ## 10 years ##1 year if( $vv < $bb *20 ) { return( $bb*2 ); } ## 20 years ##2 years if( $vv < $bb *50 ) { return( $bb*5 ); } ## 50 years ##5 years if( $vv < $bb *100 ) { return( $bb*10 ); } ## 100 years ##10 years if( $vv < $bb *200 ) { return( $bb*20 ); } ## 200 years ##20 years if( $vv < $bb *500 ) { return( $bb*50 ); } ## 500 years ##50 years return( $bb*100 ); ##100 years } $bb /= 2; ##70 days if( $vv >= $bb ) { return( $bb/5 ); } ##14 days $bb /= 2; ##35 days if( $vv >= $bb ) { return( $bb/5 ); } ##7 days $bb /= 7; $bb *= 4; ##20 days if( $vv >= $bb ) { return( $bb/5 ); } ##4 days $bb /= 2; ##10 days if( $vv >= $bb ) { return( $bb/5 ); } ##2 days $bb /= 2; ##5 days if( $vv >= $bb ) { return( $bb/5 ); } ##1 day $bb /= 2; ##2.5 days if( $vv >= $bb ) { return( $bb/5 ); } ##12 hours $bb *= 3; $bb /= 5; ##1.5 day if( $vv >= $bb ) { return( $bb/6 ); } ##6 hours $bb /= 2; ##18 hours if( $vv >= $bb ) { return( $bb/6 ); } ##3 hours $bb *= 2; $bb /= 3; ##12 hours if( $vv >= $bb ) { return( $bb/6 ); } ##2 hours $bb /= 2; ##6 hours if( $vv >= $bb ) { return( $bb/6 ); } ##1 hour $bb /= 2; ##3 hours if( $vv >= $bb ) { return( $bb/6 ); } ##30 mins $bb /= 2; ##1.5 hours if( $vv >= $bb ) { return( $bb/6 ); } ##15 mins $bb *= 2; $bb /= 3; ##1 hour if( $vv >= $bb ) { return( $bb/6 ); } ##10 mins $bb /= 3; ##20 mins if( $vv >= $bb ) { return( $bb/4 ); } ##5 mins $bb /= 2; ##10 mins if( $vv >= $bb ) { return( $bb/5 ); } ##2 mins $bb /= 2; ##5 mins if( $vv >= $bb ) { return( $bb/5 ); } ##1 min $bb *= 3; $bb /= 2; ##3 mins if( $vv >= $bb ) { return( $bb/6 ); } ##30 secs $bb /= 2; ##1.5 mins if( $vv >= $bb ) { return( $bb/6 ); } ##15 secs $bb *= 2; $bb /= 3; ##1 min if( $vv >= $bb ) { return( $bb/6 ); } ##10 secs $bb /= 3; ##20 secs if( $vv >= $bb ) { return( $bb/4 ); } ##5 secs $bb /= 2; ##10 secs if( $vv >= $bb ) { return( $bb/5 ); } ##2 secs return( $bb/10 ); ##1 sec } printf "%f -> %f\n", $_, func( $_ ) for map 10**$_, -2 .. +14; __END__ [18:49:55.78] E:\Chart>junk 0.010000 -> 2500.000000 0.100000 -> 2500.000000 1.000000 -> 2500.000000 10.000000 -> 2500.000000 100.000000 -> 2500.000000 1000.000000 -> 2500.000000 10000.000000 -> 2500.000000 100000.000000 -> 12500.000000 1000000.000000 -> 120000.000000 10000000.000000 -> 900000.000000 100000000.000000 -> 10800000.000000 1000000000.000000 -> 172800000.000000 10000000000.000000 -> 1209600000.000000 100000000000.000000 -> 15778800000.000000 1000000000000.000000 -> 157788000000.000000 10000000000000.000000 -> 1577880000000.000000 100000000000000.000000 -> 3155760000000.000000