لقد واجهت مشكلة في العمل اليوم وكنت بحاجة للاستعلام حسب الوقت، ولكن نتائج الاستعلام كانت غير صحيحة. على سبيل المثال، لمعرفة الأعضاء الذين قاموا بالتسجيل في الموقع بين 12-10-2007 و31-10-2007، بعد تحديد التاريخ، انقر على زر "الاستعلام" للعثور على الأعضاء المسجلين بتاريخ 31-10-2007. لا يتم عرض المعلومات على الإطلاق، والنتائج هي نفسها بعد عدة اختبارات. وجد المصحح أن هناك مشكلة في عبارة SQL.
عبارة SQL كما يلي: SELECT * FROM userinfo WHERE regtime >= '2007-10-12' AND regtime <= '2007-10-31'. للوهلة الأولى، يبدو أنه لا يوجد خطأ في عبارة SQL هذه، ولكن بعد مقارنة القيم المحفوظة في الحقول المقابلة في قاعدة البيانات، تبين أن القيم المحفوظة ليست في شكل بسيط date، ولكن في شكل تاريخ + وقت، أي: yyyy-MM-dd HH:mm :ss، عندما تحدد عبارة SQL حجم regtime و"2007-10-31"، ستعتقد أن "2007- 10-31' مكتوبة بشكل غير كامل، لذلك لن تعتبر القيمتان متساويتين. ما يجب القيام به؟
لا تقلق، يوفر لنا ASP وظائف إضافة وطرح التاريخ لمساعدتنا في حل هذه المشكلة.
1. تقوم وظيفة DateAdd بإضافة التاريخ
بإرجاع التاريخ الذي تمت إضافة الفاصل الزمني المحدد إليه.
DateAdd(interval, number, date)
يحتوي بناء جملة وظيفة DateAdd على المعلمات التالية (1) مطلوب الفاصل الزمني. تعبير سلسلة يمثل الفاصل الزمني المراد إضافته. راجع قسم الإعدادات لمعرفة القيم.
(2) الرقم مطلوب. تعبير رقمي يشير إلى عدد الفواصل الزمنية المراد إضافتها. يمكن أن تكون التعبيرات الرقمية موجبة (الحصول على تاريخ في المستقبل) أو سلبية (الحصول على تاريخ في الماضي).
(3) التاريخ مطلوب. متغير أو نص يمثل التاريخ الذي سيتم إضافة الفاصل الزمني إليه.
الوصف يمكنك استخدام الدالة DateAdd لإضافة أو طرح فاصل زمني محدد من تاريخ. على سبيل المثال، يمكنك استخدام DateAdd لحساب تاريخ بعد 30 يومًا من اليوم أو وقت بعد 45 دقيقة من الآن. لإضافة فاصل زمني بـ "الأيام" حتى الآن، يمكنك استخدام "أيام السنة" ("y")، أو "أيام" ("d")، أو "أيام الأسبوع" ("w").
لا تقوم الدالة DateAdd بإرجاع تواريخ غير صالحة. يضيف المثال التالي شهرًا واحدًا إلى 31 يناير 1995:
NewDate = DateAdd("m", 1, "31-Jan-95")
في هذا المثال، تقوم DateAdd بإرجاع 28 فبراير 1995، وليس 31 فبراير 1995. إذا كان التاريخ هو 31 يناير 1996، فسيتم إرجاع 29 فبراير 1996 لأن 1996 سنة كبيسة.
إذا كان التاريخ المحسوب قبل عام 100 ميلادي، فسيحدث خطأ.
إذا لم يكن الرقم قيمة طويلة، فسيتم تقريبه إلى أقرب عدد صحيح قبل الحساب.
2. تقوم دالة DateDiff لطرح التاريخ بإرجاع الفاصل الزمني بين تاريخين.
DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])
يحتوي بناء جملة الدالة DateDiff على المعلمات التالية:
(1) مطلوب الفاصلة. تعبير سلسلة يُستخدم لحساب الفاصل الزمني بين التاريخ 1 والتاريخ 2. راجع قسم الإعدادات لمعرفة القيم.
(2) التاريخ 1، التاريخ 2 مطلوبان. تعبير التاريخ. تاريخان يستخدمان للحساب.
(3) اليوم الأول من الأسبوع اختياري. ثابت يحدد اليوم الأول من الأسبوع. إذا لم يتم تحديده، فسيتم تعيينه افتراضيًا إلى يوم الأحد. راجع قسم الإعدادات لمعرفة القيم.
(4) الأسبوع الأول من العام اختياري. الثابت الذي يحدد الأسبوع الأول من السنة. إذا لم يتم تحديده، فسيتم تعيينه افتراضيًا إلى الأسبوع الذي يبدأ في الأول من يناير. راجع قسم الإعدادات لمعرفة القيم.
الوصف يتم استخدام الدالة DateDiff لتحديد عدد الفواصل الزمنية المحددة الموجودة بين تاريخين. على سبيل المثال، يمكنك استخدام DateDiff لحساب عدد الأيام بين تاريخين، أو عدد الأسابيع بين اليوم وآخر يوم في السنة.
لحساب عدد الأيام بين التاريخ 1 والتاريخ 2، يمكنك استخدام "أيام السنة" ("y") أو "الأيام" ("d"). عندما يكون الفاصل الزمني هو "يوم من الأسبوع" ("w")، تُرجع الدالة DateDiff عدد الأسابيع بين تاريخين. إذا كان date1 هو يوم الاثنين، فإن DateDiff يحسب عدد أيام الاثنين قبل date2. تحتوي هذه النتيجة على date2 ولكن ليس date1. إذا كان الفاصل الزمني هو "أسبوع" ("ww")، فستُرجع الدالة DateDiff عدد الأسابيع بين تاريخين في جدول التقويم. تقوم الدالة بحساب عدد أيام الأحد بين التاريخ 1 والتاريخ 2. سيقوم DateDiff بتقييم date2 إذا كان date2 يوم أحد، ولكن ليس date1 حتى لو كان date1 يوم أحد.
إذا كان التاريخ 1 أحدث من التاريخ 2، فستُرجع الدالة DateDiff رقمًا سالبًا.
تؤثر الوسيطة firstdayofweek على العمليات الحسابية التي تستخدم الرموز الفاصلة "w" و"ww".
إذا كان date1 أو date2 عبارة عن تاريخ حرفي، تصبح السنة المحددة جزءًا ثابتًا من التاريخ. ولكن إذا تم وضع date1 أو date2 بين علامتي اقتباس (" ") وتم حذف السنة، فسيتم إدراج السنة الحالية في كل مرة يتم فيها تقييم تعبير date1 أو date2 في التعليمات البرمجية. وهذا يجعل من الممكن كتابة كود البرنامج الذي يعمل لسنوات مختلفة.
عندما يكون الفاصل الزمني هو "سنة" ("yyyy")، قارن بين 31 ديسمبر والأول من يناير من العام التالي، على الرغم من أن الفرق هو في الواقع يوم واحد فقط، إلا أن DateDiff يُرجع 1 مما يشير إلى اختلاف قدره سنة واحدة.