انتقل إلى محتوى الدرس
الدرس 31
دورة جافا سكريبت

التاريخ والوقت في JavaScriptJavaScript Dates

تعامل بثقة مع التاريخ والوقت في JavaScript: افهم الطابع الزمني UTC وأنشئ كائنات Date بصيغة ISO وانتبه لفهرسة الأشهر الصفرية ونسّق العرض عبر Intl.DateTimeFormat.
أقسام الدرس
6
الأمثلة
3
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
8
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

يخزن كل كائن Date في JavaScript داخلياً رقماً صحيحاً واحداً فقط: هو عدد أجزاء الألف من الثانية (المللي ثانية) المنقضية منذ منتصف ليل 1 يناير 1970 بالتوقيت العالمي المنسق UTC (المعروف عالمياً باسم نقطة بداية الزمن الرقمي Unix Epoch).

وبما أن الثانية تساوي 1000 مللي ثانية واليوم يساوي 86,400,000 مللي ثانية، فإن هذا التمثيل الرقمي يجعل مقارنة اللحظات الزمنية وطرحها عملية حسابية دقيقة وموحدة حول العالم.

مخطط تمثيل الزمن في JavaScript من المللي ثانية القياسية إلى بناء كائن Date وفهرسة الأشهر والتنسيق المحلي

ننشئ كائن التاريخ باستخدام الباني new Date(...) بثلاث صيغ موثوقة: استدعاء new Date() بلا وسائط لالتقاط اللحظة الحالية، أو تمرير نص قياسي بصيغة ISO 8601 مثل new Date("2026-11-06T10:30:00Z")، أو تمرير أرقام السنة والشهر الصفري واليوم مثل new Date(2026, 10, 6).

JavaScript
const launch = new Date('2026-11-06T09:00:00Z');
const localExam = new Date(2026, 10, 6, 14, 30);
document.getElementById('dt-create').textContent =
  `ISO UTC: ${launch.toISOString()} | Year: ${localExam.getFullYear()}`;

انتبه لأشهر مفاجأة في تاريخ JavaScript: الأشهر مرقمة فهرسياً من الصفر (0 ليناير حتى 11 لديسمبر)، بينما تبدأ أيام الشهر في getDate() من الرقم 1 كالمعتاد! لذلك أضف دائماً + 1 عند عرض رقم الشهر، أو استخدمه مباشرةً كفهرس في مصفوفة أسماء الأشهر:

دالة القراءةالنطاق الرقمي المرجعتنبيه عملي مهم
d.getFullYear()سنة من 4 أرقام مثل 2026استخدمها دائماً وتجنب الدالة المهجورة getYear()
d.getMonth()من 0 إلى 11فهرس صفري! أضف 1 لعرض رقم الشهر البشري
d.getDate()من 1 إلى 31رقم اليوم داخل الشهر الميلادي
d.getDay()من 0 إلى 6ترتيب يوم الأسبوع (0 الأحد .. 6 السبت)

تعدل دوال الضبط مثل setFullYear() وsetMonth() وsetDate() كائن التاريخ موضعياً مع ميزة التصحيح التلقائي لحدود الأشهر؛ فإضافة 7 أيام إلى 28 يناير تنتقل تلقائياً وبذكاء إلى 4 فبراير!

ولحساب عدد الأيام الفاصلة بين تاريخين، اطرح طابعيهما الزمنيين ثم اقسم الناتج على 86_400_000 مللي ثانية لليوم الواحد.

JavaScript
const start = new Date('2026-11-01T00:00:00Z');
const deadline = new Date('2026-11-16T00:00:00Z');
const msPerDay = 1000 * 60 * 60 * 24;
const daysLeft = Math.round((deadline - start) / msPerDay);
document.getElementById('diff-out').textContent =
  `Month #: ${start.getUTCMonth() + 1} | Window: ${daysLeft} days`;

عندما تحتاج فقط إلى الرقم اللحظي الحالي بالمللي ثانية—لقياس زمن تنفيذ عملية برمجية أو ختم وقت حدث معين—استدعِ الدالة الساكنة الخفيفة Date.now() مباشرةً دون تكلفة إنشاء كائن new Date() جديد بالذاكرة.

بدلاً من تركيب نصوص الأيام والأشهر يدوياً، توفر المتصفحات الحديثة تنسيقاً محلياً احترافياً عبر date.toLocaleDateString() أو الواجهة القياسية السريعة new Intl.DateTimeFormat(locale, options) التي تدعم أسماء الأشهر والتقاويم بالعربية والإنجليزية تلقائياً!

JavaScript
const eventDate = new Date('2026-11-06T12:00:00Z');
const enFmt = new Intl.DateTimeFormat('en-US', {
  dateStyle: 'long',
  timeZone: 'UTC',
});
document.getElementById('loc-out').textContent =
  `Event: ${enFmt.format(eventDate)} | Stamp: ${Date.now() > 0}`;
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس تمثيل الزمن بالمللي ثانية منذ 1970، وإنشاء كائنات Date بصيغة ISO الآمنة، والتعامل مع فهرسة الأشهر الصفرية، وحساب الفروق الزمنية، واستخدام Date.now()، والتنسيق المحلي عبر Intl.DateTimeFormat. الخطوة التالية: ابدأ الآن الفصل السادس (التحكم في مسار التنفيذ) لتوجيه قرارات البرنامج الشرطية بذكاء!

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Unix Epoch نقطة بداية الزمن Unix Epoch
منتصف ليل 1 يناير 1970 بالتوقيت العالمي UTC وهو المرجع الصفري لعداد المللي ثانية في JavaScript.
للمراجعة
02 Date.now() دالة الطابع اللحظي Date.now
دالة ساكنة ترجع عدد المللي ثانية الحالي مباشرةً كرقم سريع دون حجز كائن Date جديد.
للمراجعة
03 Zero-Indexed Month فهرسة الأشهر الصفرية (0..11)
قاعدة ترقيم الأشهر في كائن Date حيث يبدأ يناير بالرقم 0 وينتهي ديسمبر بالرقم 11.
للمراجعة
04 Intl.DateTimeFormat منسق التاريخ الدولي Intl.DateTimeFormat
واجهة قياسية مدمجة تنسق عرض التواريخ والأوقات وفق لغة المستخدم ومنطقته الزمنية.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات2

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 2 مفهومةأول بطاقة، أول خطوة
01 UTC UTC
Coordinated Universal Time
التوقيت العالمي المنسق المعتمد داخلياً لتوحيد الطوابع الزمنية حول العالم.
للمراجعة
02 ISO 8601 ISO 8601
International Date & Time Format Standard
الصيغة القياسية الدولية لكتابة التاريخ والوقت (YYYY-MM-DD) الخالية من التباس ترتيب اليوم والشهر.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. افتح مثال فرق الموعد النهائي في محرر التجربة وعدّل تاريخ deadline إلى يوم 25 نوفمبر وتحقق من عدد الأيام.

  2. افتح مثال التنسيق الدولي في محرر التجربة وغيّر رمز اللغة من "en-US" إلى "ar-EG" لمشاهدة التاريخ بالعربية.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

10أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي10 أسئلة تنتظرك
01

ما الرقم الذي ترجعه الدالة getUTCMonth() لشهر ديسمبر في التاريخ 2026-12-20؟

02

ما الوحدة والنقطة المرجعية التي يخزن بها كائن Date الزمن داخلياً في JavaScript؟

03

أي استدعاء يرجع الطابع الزمني الحالي بالمللي ثانية كرقم مباشر دون إنشاء كائن Date جديد؟

04

ما الدالة الصحيحة لاستخراج رقم السنة الكامل من 4 خانات (مثل 2026) من كائن التاريخ d؟

05

ما الفرق بين دالتي d.getDate() وd.getDay() في كائن التاريخ؟

06

تمنع الصيغة القياسية ISO 8601 مثل "2026-11-06T09:00:00Z" التباس ترتيب اليوم والشهر بين الأنظمة.

07

ماذا ترجع الدالة d.getTime() عند إنشاء الكائن من نص غير صالح مثل new Date("invalid")؟

08

يتأثر Date.now() في المتصفح بتغيير المستخدم لساعة جهازه، لذا يجب التحقق من المواعيد الحساسة في الخادم.

09

كم عدد المللي ثانية في اليوم القياسي المكون من 24 ساعة؟

10

تصحح دوال الضبط مثل d.setDate(32) في شهر يناير التاريخ تلقائياً بالانتقال لأوائل شهر فبراير.