JavaScript: التواريخ في JavaScript

آخر تحديث: 2026-10-13

تستخدم JavaScript كائن Date للعمل مع التواريخ والأوقات. فكّر فيه كـ ساعة رقمية — يعرض الوقت الحالي، يتيح لك تعيين أي لحظة، ويمكنه حساب الفرق بين وقتيين.

دوال التاريخ ذات صلة:getFullYear() toISOString() getMonth() getHours() Date.now() getDate() getDay() Date set

1. إنشاء والتعامل مع كائنات Date

أربع طرق شائعة لإنشاء Date:

HTML
<script>
console.log(new Date());                      // التاريخ والوقت الحاليان
console.log(new Date("2025-06-19"));          // سلسلة تاريخ
console.log(new Date(2025, 5, 19, 10, 30, 0)); // سنة، شهر، يوم، ساعات، دقائق، ثواني
console.log(new Date(1718764800000));         // طابع زمني (ميلي ثانية)
</script>

مشكلة كبيرة: الأشهر تبدأ من الصفر! 0 = يناير، 11 = ديسمبر. في new Date(2025, 5, 19)، الرقم 5 يعني يونيو وليس مايو. هذه arguably أكثر قرار تصميم انتُقد في كائن Date — على الإطلاق.

(2) الحصول على التاريخ والوقت

الطريقة تُرجع ملاحظة
getFullYear() سنة بأربعة أرقام لا تستخدم getYear() — مهملة
getMonth() 0–11 أضف 1 للشهر الفعلي
getDate() 1–31 يوم الشهر
getDay() 0–6 0 = الأحد وليس الاثنين!
getHours() 0–23 —
getMinutes() 0–59 —
getSeconds() 0–59 —

getDay() تُرجع يوم الأسبوع وليس يوم الشهر — استخدم getDate() لذلك. المبتدئون كثيراً ما يخلطون بينهما.

(3) تعيين التاريخ والوقت

توجد مجموعة مطابقة من طرق set: setFullYear()، setMonth()، setDate()، setHours()، setMinutes()، setSeconds(). القيم تتدحرج تلقائياً عند التعيين:

HTML
<script>
const d = new Date(2025, 5, 19);
d.setDate(32); // تصبح تلقائياً 2 يوليو
console.log(d.toLocaleDateString());
</script>

(4) تنسيق التواريخ

الطريقة مثال المخرجات
toLocaleDateString() "6/19/2025"
toLocaleTimeString() "10:30:00 AM"
toLocaleString() "6/19/2025, 10:30:00 AM"

هذه الطرق تنسق تلقائياً بناءً على إعدادات_locale للمتصفح.

(5) الطوابع الزمنية وحساب فروقات الوقت

الطابع الزمني هو عدد المليلي ثواني المنقضية منذ 1 يناير 1970 00:00:00 UTC.

HTML
<script>
console.log(Date.now());           // الحصول على الطابع الزمني الحالي
console.log(new Date().getTime()); // نفس ما فوق
</script>

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

HTML
<script>
const start = Date.now();
for (let i = 0; i < 1000000; i++) {} // محاكاة بعض العمليات
const end = Date.now();
const diff = end - start;        // ميلي ثانية
const diffSeconds = diff / 1000; // ثواني
console.log("الوقت المنقضي: " + diff + "مللي ثانية (" + diffSeconds + " ثانية)");
</script>

▶ مثال: عرض التاريخ والوقت الحاليين

▶ جرّب الكود

▶ مثال: تفاصيل معلومات التاريخ

▶ جرّب الكود

▶ مثال: مؤقت تنازلي

▶ جرّب الكود

▶ مثال: حاسبة فرق التاريخ

▶ جرّب الكود

دوال التاريخ ذات صلة:getFullYear() toISOString() getMonth() getHours() Date.now() getDate() getDay() Date set

❓ أسئلة شائعة

س لماذا getMonth() يتطلب إضافة 1؟
ج لأن فئة Date في Java صُممت بهذه الطريقة، ورثت JavaScript تلك "التقليد". الجميع يتفق أن التصميم سخيف، لكن لا يمكن تغييره — كثير من الكود الحالي يعتمد على هذا السلوك. فقط احفظه.
س هل هناك فرق بين new Date("2025-06-19") و new Date(2025, 5, 19)؟
ج نعم. التواريخ المحللة نصياً تستخدم UTC منتصف الليل بشكل افتراضي، بينما الشكل المaramتري يستخدم الوقت المحلي. الوقت المعروض قد يختلف بـ 8 ساعات (لـ UTC+8). إذا كنت تهتم فقط بالتاريخ وليس الوقت، الشكل المaramتري أكثر أماناً.
س كيف أحسب عمر شخص ما؟
ج اطرح سنة ميلاده من السنة الحالية، ثم تحقق ما إذا كان عيد ميلاده قد مر هذا العام: إذا كان الشهر الحالي أقل من شهر الميلاد، أو كانت الأشهر متساوية لكن اليوم الحالي أقل من يوم الميلاد، اطرح 1 من العمر.

📖 ملخص

📝 تمارين

  1. اكتب دالة formatDate(date) تُعيد سلسلة بالشكل "YYYY-MM-DD (يوم الأسبوع)". تأكد أن الأشهر والأيام تت padding بأصفار.
  2. اكتب دالة getAge(birthday) تستقبل سلسلة تاريخ (مثل "2000-03-15") وتُعيد العمر الحالي بالسنوات الكاملة.
  3. ابني ميزة "وقت سابق": بتواريخ تاريخ الماضي، اعرض "منذ X سنوات، X أشهر، X أيام" أو "منذ X أيام" أو "منذ X ساعات" — مع اختيار التنسيق المناسب تلقائياً بناءً على فرق الوقت.
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%