لديك حساب بالفعل؟ دخول
دخول  سجل الأن 
تصحيح دالة تحويل التاريخ الى “ساعة,مضت”
من بين الأخطاء الشائعة هي استخدام الدالة round بدل intval
الأولى تحول العدد الى عدد تقريبي يعني مثلا لو الساعة 6 و النصف ستقول لنا الساعة 7
في حين الدالة الثانية intval تحذف كل ما وراء الفاصلة, يعني لو الساعة 6 و النصف ستقول لنا بأن الساعة 6
هو في الحالتين الرقمين تقريبيين للساعة السادسة و النصف, لكنني أرى أنه من الأفضل أن تكون الساعة منقوصة على أن تكون زائدة
لأنه عند تحويل التاريخ 06:30 من الأرقام الى الساعات مثلاً سنكتب:

مضت 6 ساعات, و فعلا صحيح فقد مرت 6 ساعات
و لكن إذا قلنا مضت 7 ساعات, فهذا خطأ لأنه 7 ساعات لم تمضي بعد

هذا من جهة.
من جهة أخرى هناك خطأ ثاني وهو عرض الرقم 60 أو 24
إفحص ساعتك الرقمية أو ساعة حاسوبك و اضبطها على 23:59:56 مثلاً
و انظر ما سيحصل.!

لن يتم عرض الرقم 60 سواء في الدقائق أو الثواني و كذلك الرقم 24 في الساعات , و بمجرد تصل الدقائق أو الثواني الى 59 الرقم الموالي يكون 00 و تبدأ العد من جديد في حين يذهب رقم 1 الى الساعات او الدقائق
فلهذا أظن أن عرض الرقم 60 أو 24 هو كذلك خطأ

تم تصحيح الدالة و أعرضها أمامكم

ملاحظة: الدالة تحول فقط 24 ساعة يعني بعد 24 ساعة سيظهر الوقت كما هو. يمكن التعديل عليها بسهولة و اضافة الاشهر او الايام و السنوات, لأنني لا أعتقد أنها مهمة أزلتها.
function timeBetween($start,$end = null){
    $end = (is_null($end)) ? time() : $end;
       $time = $end - $start;
       
           if($time <= 60){
       if($time <= 1){
        return 'منذ ثانية واحدة';
    }
    if($time <= 2){
        return 'منذ ثانيتين';
    }
        if($time <= 10){
        return 'منذ '.$time.' ثواني';
    }
        if($time <= 59){
        return 'منذ '.$time.' ثانية';
      }
              if($time <= 60){
        return 'منذ دقيقة واحدة';
      }
        }  
    
    if(60 < $time && $time <= 3600){
       $r = intval($time/60);
       
       if($r <= 1){
        return 'منذ دقيقة واحدة';
    }          
            if($r <= 2){
        return 'منذ دقيقتين';
    } 
                if($r <= 10){
        return 'منذ '.$r.' دقائق';
    }
    
                    if($r <= 59){
        return 'منذ '.$r.' دقيقة';
    }
    
                        if($r <= 60){
        return 'منذ ساعة واحدة';
    }
    
    }
    
    
    if(3600 < $time && $time <= 86400){
       $r = intval($time/3600);
        
        
            if($r <= 1){
        return 'منذ ساعة واحدة';
           }          
            if($r <= 2){
        return 'منذ ساعتين';
    } 
                if($r <= 10){
        return 'منذ '.$r.' ساعات';
    }
    
                    if($r <= 23){
        return 'منذ '.$r.' ساعة';
    }
      
                        if($r <= 24){
        return 'منذ يوم أمس';
    }
            
    }


    if($time > 86400){
        return date('M d y \a\t h:i A',$start);
    }
}


إن أحسنت فمن الله ، وإن أسأت أو أخطأت فمن نفسي والشيطان
‏ ‏اللهم انفعني بما علمتني وعلمني ما ينفعني وزدني علما
تاريخ البداية: 23 / يناير / 2012 الساعة 12:21 اخر نشاط: 27 / يناير / 2012 الساعة 15:54 دالة تصحيح تاريخ تحويل

تم الاستبدال
23 / يناير / 2012 الساعة 12:42

اضافات اكثر من رائعة
23 / يناير / 2012 الساعة 22:3

3 إجابات
دالة رائعة وتطوير جميل
شكراً لك

بواسطة: Eisa.Ahmed
منذ: 27 / يناير / 2012 الساعة 15:54

أشير كذلك إلى أنه لا يجب استعمال الدالة

getdate($t);
مع الوقت و الاكتفاء بها فقط في التاريخ لأنها تعرض لنا الوقت عند منتصف الليل هكذا 0:0 لذلك يفضل استعمال الدالة
date("H:i",$start);


حتى نحصل على التاريخ عند منتصف الليل 00:00

هذا و الله أعلم

بواسطة: Imad
منذ: 23 / يناير / 2012 الساعة 18:42

مشكور على المعلومة
23 / يناير / 2012 الساعة 22:3

يوجد كذلك خطأ هنا
ترجمة دالة date الى العربية

مثال الاستعمال
ليس

echo date_arabic("D j M ،Y",time());
و إنما
   $timenow = time();
echo date_arabic($timenow);

بواسطة: Imad
منذ: 23 / يناير / 2012 الساعة 13:15

أنشر اجابتك

xهل تريد الاجابة عن هذا السؤال؟ من فضلك سجل دخول او اشترك لتتمكن من الاجابة