اذهب إلى المحتوى

السؤال

نشر

اشاهد في بعض تطبيقات التواصل الاجتماعي وأيضا التطبيقات التجارية يتم إضافة عداد او توقيت او تاريخ زمني 

على سبيل المثال منتج تم عرضه في تطبيق تجاري توجد ساعه  او توقيت صغير خارج المنشور مكتوب عليه ( منذ مثلا 1 ساعه او منذ 3 أيام )ويبقى هذا العدد يحسب الأيام بشكل مستمر

كيف يتم عمل ذلك او عمل هذا العدد الزمني ؟ مع العلم ان مشروعي من خلال flutter وتوجد ملفات php + قاعدة بيانات اون لاين MySQL 

 

Recommended Posts

  • 1
نشر

الأمر يتكون من جزأين،

  • إضافة timestamp طابع زمني لكل منتج في قاعدة البيانات، يمثل تاريخ الإضافة و الذي سوف نحسب منه الوقت تتم هذه إما من قاعدة البيانات أو من خلال PHP تضيف الوقت الفعلي للسيفر عند إضافة منشور
  • حساب الفرق بين الوقت الحالي ووقت إضافة المنتج ومن ثم تحويله لنص سهل القراءة 
    • يمكن عمله في BackEnd قبل إعادة بيانات المنتج (مستحسن)
    • أو حسابه في التطبيق ( هنا ربما المنطقة الزمنية لساعة هاتف مستخدم التطبيق ستعطي وقت غير متوافق مع الخادم وبالتالي خطأ في الحساب)

يمكنك استخدام مكتبة carbon فهي مكتبة قوية تدعم تعدد اللغات وسوف نستخدم دالة diffForHumans التي تعيد الوقت المنقضي بتنسيق قابل للقراءة البشرية بسهولة

<?php

$date = Carbon::now()->locale('ar'); 


echo $date->diffForHumans(); 

يمكنك مراجعة التوثيق لمزيد من المعلومات

كما يمكن حساب الفرق بين توقيتين، ثم عمل منطق بسيط لحساب الأشهر - الساعات ..

<?php

// دالة تستقبل الفرق بين وقتين
function format_interval(DateInterval $interval) {
  // بناء الوقت كنص
    $result = "";
  // كل متغير له قيمة نضيفه مع واحدته الزمنية
    if ($interval->y) { $result .= $interval->format("%y years "); }
    if ($interval->m) { $result .= $interval->format("%m months "); }
    if ($interval->d) { $result .= $interval->format("%d days "); }
    if ($interval->h) { $result .= $interval->format("%h hours "); }
    if ($interval->i) { $result .= $interval->format("%i minutes "); }
    if ($interval->s) { $result .= $interval->format("%s seconds "); }

    return $result;
}
// حساب تاريخين
$first_date = new DateTime("2012-11-30 17:03:30");
$second_date = new DateTime("2012-12-21 00:00:00");

// حساب الفرق بين التاريخين
$difference = $first_date->diff($second_date);

// طباعة الوقت المنقضي
echo format_interval($difference);

الاستخدام، 

  • تجلب وقت إضافة المنتج لقاعدة البيانات أو الحقل الذي يمثل القيمة الزمنية التي تريدها ولنفترض أن اسمه هو created_at.
  • تطرح الوقت الفعلي من created_at ثم تمرره للدالة formate_interval

مثال مع كاربون:

$carbondate = Carbon::parse($post->created_at); 
$past = $carbondate->diffForHumans();

echo($past);

مقالة:

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...