Calendar و DateComponents
أجرِ العمليات الحسابية على التواريخ عبر التقويمات.
Calendar و DateComponents درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.
Calendar وDateComponents
يفسّر Calendar قيمة Date إلى وحدات بشرية مثل السنة والشهر واليوم. ويحتفظ DateComponents بهذه القيم المفصّلة.
التقويم الحالي
يعكس Calendar.current إعدادات المستخدم. وهو حلقة الوصل بين لحظات Date الخام والحقول المسماة.
import Foundation
let cal = Calendar.current
print("Calendar identifier: \(cal.identifier)")استخراج المكوّنات
تستخرج dateComponents(_:from:) الحقول المطلوبة من تاريخ وتضعها في قيمة من نوع DateComponents.
import Foundation
let cal = Calendar.current
let comps = cal.dateComponents([.year, .month, .day], from: Date())
print("Year is set: \(comps.year != nil)")قراءة حقل واحد
تعيد الطريقة المختصرة component(_:from:) حقلًا واحدًا مباشرةً على هيئة Int.
import Foundation
let cal = Calendar.current
let weekday = cal.component(.weekday, from: Date())
print("Weekday number between 1 and 7: \(1...7 ~= weekday)")إنشاء تاريخ من المكوّنات
املؤوا قيمة DateComponents واطلبوا من التقويم إنشاء قيمة Date المطابقة باستخدام date(from:).
import Foundation
var comps = DateComponents()
comps.year = 2024
comps.month = 12
comps.day = 25
let cal = Calendar.current
if let date = cal.date(from: comps) {
print("Built a date: \(date.timeIntervalSince1970 > 0)")
}الحساب على التواريخ
تضيف date(byAdding:to:) مقدارًا من مكوّن بأمان، وتتولى التعامل مع اختلاف أطوال الأشهر والسنوات الكبيسة.
import Foundation
let cal = Calendar.current
let now = Date()
if let nextWeek = cal.date(byAdding: .day, value: 7, to: now) {
print(nextWeek > now)
}إضافة وحدات متعددة
يمكنكم إضافة عدة وحدات دفعةً واحدة عبر تمرير DateComponents يصف الإزاحة.
import Foundation
let cal = Calendar.current
var offset = DateComponents()
offset.month = 1
offset.day = 3
if let future = cal.date(byAdding: offset, to: Date()) {
print(future > Date())
}الفروق بين التواريخ
اعكسوا العملية: تعيد dateComponents(_:from:to:) الوحدات المنقضية بين تاريخين.
import Foundation
let cal = Calendar.current
let now = Date()
let later = now.addingTimeInterval(3 * 86400)
let diff = cal.dateComponents([.day], from: now, to: later)
print("Days apart: \(diff.day ?? -1)")بداية اليوم
تعيد startOfDay(for:) منتصف الليل الخاص بالتاريخ وفق التقويم، وهذا مفيد لتجميع الأحداث حسب اليوم.
import Foundation
let cal = Calendar.current
let midnight = cal.startOfDay(for: Date())
print(midnight <= Date())التحقق من اليوم نفسه
توضح لكم isDate(_:inSameDayAs:) ما إذا كان تاريخان يقعان في اليوم التقويمي نفسه.
import Foundation
let cal = Calendar.current
let now = Date()
let soon = now.addingTimeInterval(60)
print(cal.isDate(now, inSameDayAs: soon))لماذا نستخدم Calendar
يؤدي إجراء الحسابات بإضافة ثوانٍ خام إلى نتائج خاطئة عند عبور التوقيت الصيفي وحدود الأشهر. استخدموا دائمًا Calendar لإجراء الحسابات على الأيام والأشهر والسنوات.
import Foundation
let cal = Calendar.current
// Correct: add 1 month, not 30 * 86400 seconds.
if let d = cal.date(byAdding: .month, value: 1, to: Date()) {
print("Added a month correctly: \(d > Date())")
}تحقق سريع
ما الطريقة الصحيحة لإضافة شهر واحد إلى تاريخ؟
مراجعة
يحوّل Calendar بين Date والحقول المسماة عبر DateComponents. وقد استخرجتم الحقول، وأنشأتم التواريخ، وأضفتم الوحدات باستخدام date(byAdding:)، وحسبتم الفروق، وتعرّفتم إلى سبب تفوق حسابات التقويم على الحسابات بالثواني الخام. التالي: تنسيق التواريخ لعرضها.
الأسئلة الشائعة
هل درس «Calendar و DateComponents» مجاني؟
نعم — نص درس «Calendar و DateComponents» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.
ماذا ستتعلم في «Calendar و DateComponents»؟
أجرِ العمليات الحسابية على التواريخ عبر التقويمات. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «Calendar و DateComponents»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- نوع Date والفواصل الزمنية
- Calendar و DateComponents
- تنسيق التواريخ
- المناطق الزمنية والمحليات