calculate time difference between present and past and future in a really efficient way


للتغيير ما بين الماضي والحاضر والمستقبل بحاجة لكم، على أن تفعل أشياء فقط على الجانب الشاشة (أي رمز التصحيح الحاجة).
الدالة الافتراضية هي :


كود:
timeago([referencedate], [timepointer], [measureby], [autotext])
$ timepointer هو من أين تبدأ وهناك حاجة لحساب إلا إذا كنت حساب الفرق بين 2 أوقات محددة. وبعبارة أخرى ، فإن هذا ليس واحدا من تلك الأوقات.
$ referencedate هي المرة كنت لحساب. هذا أمر مطلوب لجميع العمليات الحسابية.
measureby دولار لاستخدام وحدة
$ النص التلقائي هو ما إذا كان لإضافة "أيام من الآن" أو "منذ" إلى السلسلة. الخيار الوحيد للتواريخ الحاضر، وإلا، يتم تعيين هذا المتغير إلى الخروج.
لاستخدام معيار، والماضي والحاضر : timeago (pastdate) ؛
فإنه سيتم الكشف عن تلقائيا في المرة منذ ذلك الحين في الوحدات المناسبة.
هناك بعض الأخطاء الترميز لأن التقريب تلعب لفة ضخمة. اذا كان 390 يوما من الآن ، بدلا من أن تقول "1 سنة، و 25 يوما"، الدالة سيقول "(1) السنة". آخر أفضل حل إذا كنت تستطيع.
كود:
01    function timeago($referencedate=0,02                         $timepointer='',
03                             $measureby='', $autotext=true){
04     
05    if($timepointer == '') $timepointer = time();
06    $Raw = $timepointer-$referencedate;
07    $Clean = abs($Raw);
08    $calcNum = array(array('s', 60),
09                     array('m', 60*60),
10                     array('h', 60*60*60),
11                     array('d', 60*60*60*24),
12                     array('y', 60*60*60*24*365));
13    $calc = array('s' => array(1, 'second'),
14                  'm' => array(60, 'minute'),
15                  'h' => array(60*60, 'hour'),
16                  'd' => array(60*60*24, 'day'),
17                  'y' => array(60*60*24*365, 'year'));
18    
19    if($measureby == ''){
20        $usemeasure = 's';
21    
22        for($i=0; $i<count($calcNum); $i++){
23            if($Clean <= $calcNum[$i][1]){
24                $usemeasure = $calcNum[$i][0];
25                $i = count($calcNum);
26            }       
27        }
28    }else{
29        $usemeasure = $measureby;
30    }
31    
32    $datedifference = floor($Clean/$calc[$usemeasure][0]);
33    
34    if($autotext==true && ($timepointer==time())){
35        if($Raw < 0){
36            $prospect = ' from now';
37        }else{
38            $prospect = ' ago';
39        }
40    }
41    
42    if($referencedate != 0){
43        if($datedifference == 1){
44            return $datedifference . ' ' . $calc[$usemeasure][1] . ' ' . $prospect;
45        }else{
46            return $datedifference . ' ' . $calc[$usemeasure][1] . 's ' . $prospect;
47        }
48    }else{
49        return 'No input time referenced.';
50    }
51}