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

السؤال

نشر (معدل)

الان اصبحت افهم بضع من الاكواد التي اطبقها بفضلكم شكرأ جزيلاً لكم ☺️

لكن تبقى هذه الكود لم افهمه بشكل واضح 

const formatingTimes = (times) => {
  if(!times){
    return "00:00";
  }
  let [hours , minutes] = times.split(":").map(Number)
  const perd = hours >= 12 ? "PM" : "AM";
  hours = hours % 12 || 12
  return `${hours}:${minutes < 10 ? "0" + minutes : minutes} ${perd}`
}

 

تم التعديل في بواسطة Mustafa Suleiman
تعديل عنوان السؤال

Recommended Posts

  • 0
نشر

الفكرة هي تحويل الوقت من صيغة 24 ساعة إلى صيغة 12 ساعة مع إضافة "AM" أو "PM" وذلك من خلال دالة بداخلها المنطق لتنفيذ ذلك واسمها formatingTimes تستطيع استدعائها متى تريد.

بها معامل باسم times تستقبل قيمة له وهي الوقت الذي تريد تحويله، وفي حال لم يتم إدخال وقت أي قيمة times فارغة أو null أو undefined، فستعيد "00:00" كقيمة افتراضية.

عند استقبال الوقت وليكن مثلاً "14:30" فيتم تقسيمه عند علامة : باستخدام split(":")، فيصبح لديك مصفوفتين، الساعات hours والدقائق minutes.

ثم يحول القيمتين إلى أرقام باستخدام map(Number)، لأن split تُعيد نصوص.

ولو الساعات أكبر من أو تساوي 12، يتم تعيين "PM" للمتغير perd، والعكس لو أقل من 12، يتم تعيين "AM".

ويتم التحويل من خلال عامل باقي القسمة % حيث يتم قسمة الساعات على 12 لتحويل الساعات إلى صيغة 12 ساعة، أي لو الساعة 14 فباقي قسمة 14 % 12 = 2.

وفي حال الساعات تساوي 0 وذلك عند منتصف الليل، يتم تحويلها إلى 12 باستخدام || 12 حيث عامل || يعني أو في البرمجة لأن 0 تعني false لذا يتم تعيين القيمة الأخرى بعد || وهي 12 لأنها true وذلك يسمى Short circuiting في جافاكسريبت.

ثم تنسيق الدقائق في template literals أو قالب النص في النهاية، كالتالي في حال الدقائق minutes أقل من 10، يتم إضافة صفر قبله مثل 05 بدلاً من 5، حيث يوجد شرط ثلاثي Ternary Operator.

 minutes < 10 ? "0" + minutes : minutes

 

  • 0
نشر
بتاريخ 15 دقائق مضت قال Hxfhf Ucicic:
const formatingTimes = (times) => {

أولا هنا نقوم بتعريف الدالة التي تسمى formatingTimes وهذه الدالة تأخذ معامل واحد وهو ال times .

بتاريخ 15 دقائق مضت قال Hxfhf Ucicic:
  if(!times){
    return "00:00";
  }

في هذا الجزء نتحقق من المعامل times فلو كان فارغا فسيتم إعادة القيمة "00:00" . فمثلا لو تم تمرير سلسلة فارغة "" فهنا الشرط سيتحقق وسيتم إعادة تلك القيمة.

بتاريخ 15 دقائق مضت قال Hxfhf Ucicic:
  let [hours , minutes] = times.split(":").map(Number)

هنا يتم إستخدام الدالة split وتلك الدالة تقوم بفصل السلاسل النصية إلى أجزاء بناء على النص الذي نريد الفصل عنده وتقوم بإعادة مصفوفة بالنص المفصول .

فمثلا لو تم تمرير "15:30" فهنا سيتم فصل السلسلة عند ":" وهكذا سيكون لدينا مصفوفة من عنصرين هما :

["15","30"]

بعد نستخدم map لنقوم بتحويل النص إلى رقم ونقوم بعد ذلك بوضع كل جزء في متغير . أى سيتم وضع الساعات في المتغير hours والدقائق في المتغير minutes .

بتاريخ 17 دقائق مضت قال Hxfhf Ucicic:
  const perd = hours >= 12 ? "PM" : "AM";

هنا ننشأ متغير جديد pred وهو يحوي قيمة الوقت سواء كان PM أى مساءا أو AM أى صباحا . حيث نرى لو أن الساعات أكبر من أو تساوي 12 إذا نحن مساءا ونضع PM .

بتاريخ 18 دقائق مضت قال Hxfhf Ucicic:
  hours = hours % 12 || 12

هنا نحن نريد أن نحول الساعات من صيغة 24 إلى 12 ولهذا نقوم بأخذ باقي القسمة على 12 حيث الرمز % هو باقي القسمة وهكذا نستطيع تحويل أى رقم أكبر من 12 إلى 1 حتى 12 . فمثلا لو الساعات 14 سيكون الناتج هو 1 وباقي القسمة 2 إذا الساعة ستكون 2 مساء.

بتاريخ 19 دقائق مضت قال Hxfhf Ucicic:
  return `${hours}:${minutes < 10 ? "0" + minutes : minutes} ${perd}`

وأخيرا هنا نعيد الوقت بعد تحويله إلى صيغة 12 ساعة .

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...