باستخدام جافا سكريبت، كيف أتأكد من صلاحية النطاق الزمني؟

StackOverflow https://stackoverflow.com/questions/73971

  •  09-06-2019
  •  | 
  •  

سؤال

في JavaScript، ما هي أفضل طريقة لتحديد ما إذا كان التاريخ المقدم يقع ضمن نطاق صالح؟

مثال على ذلك قد يكون التحقق لمعرفة ما إذا كان إدخال المستخدم requestedDate هو جزء من أسبوع العمل الصالح التالي.لاحظ أن هذا لا يقتصر على التحقق لمعرفة ما إذا كان تاريخ ما أكبر من تاريخ آخر، حيث أن التاريخ الصحيح سيكون مساويًا أو أكبر من الطرف الأدنى للنطاق بينما يكون أقل من أو يساوي الطرف العلوي للنطاق.

هل كانت مفيدة؟

المحلول

هذه في الواقع مشكلة رأيتها تظهر من قبل كثيرًا في أعمالي والجزء التالي من التعليمات البرمجية هو إجابتي للمشكلة.

// checkDateRange - Checks to ensure that the values entered are dates and 
//     are of a valid range. By this, the dates must be no more than the 
//     built-in number of days appart.
function checkDateRange(start, end) {
   // Parse the entries
   var startDate = Date.parse(start);
   var endDate = Date.parse(end);
   // Make sure they are valid
    if (isNaN(startDate)) {
      alert("The start date provided is not valid, please enter a valid date.");
      return false;
   }
   if (isNaN(endDate)) {
       alert("The end date provided is not valid, please enter a valid date.");
       return false;
   }
   // Check the date range, 86400000 is the number of milliseconds in one day
   var difference = (endDate - startDate) / (86400000 * 7);
   if (difference < 0) {
       alert("The start date must come before the end date.");
       return false;
   }
   if (difference <= 1) {
       alert("The range must be at least seven days apart.");
       return false;
    }
   return true;
}

الآن هناك بعض الأشياء التي يجب ملاحظتها حول هذا الرمز، Date.parse يجب أن تعمل الدالة مع معظم أنواع الإدخال، ولكن من المعروف أنها تواجه مشكلات مع بعض التنسيقات مثل "YYYY MM DD" لذا يجب عليك اختبار ذلك قبل استخدامها.ومع ذلك، يبدو أنني أتذكر أن معظم المتصفحات ستفسر سلسلة التاريخ المعطاة لـ Date.parse بناءً على إعدادات منطقة أجهزة الكمبيوتر.

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

نصائح أخرى

لذا، إذا فهمت الأمر حاليًا، فأنت بحاجة إلى معرفة ما إذا كان أحد التاريخين أكبر من الآخر.

function ValidRange(date1,date2)
{
   return date2.getTime() > date1.getTime();
}

ستحتاج بعد ذلك إلى تحليل السلاسل التي تحصل عليها من واجهة المستخدم، باستخدام Date.parse، على النحو التالي:

ValidRange(Date.parse('10-10-2008'),Date.parse('11-11-2008'));

هل هذا يساعد؟

var myDate = new Date(2008, 9, 16);

// is myDate between Sept 1 and Sept 30?

var startDate = new Date(2008, 9, 1);
var endDate = new Date(2008, 9, 30);

if (startDate < myDate && myDate < endDate) {
    alert('yes');
    // myDate is between startDate and endDate
}

هناك مجموعة متنوعة من التنسيقات التي يمكنك تمريرها إلى مُنشئ Date() لإنشاء تاريخ.يمكنك أيضًا إنشاء تاريخ جديد بالوقت الحالي:

var now = new Date();

وتعيين خصائص مختلفة عليه:

now.setYear(...);
now.setMonth(...);
// etc

يرى http://www.javascriptkit.com/jsref/date.shtml أو جوجل لمزيد من التفاصيل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top