জাভাস্ক্রিপ্টে "মিমি / ডিডি / ইয়িআই" ফর্ম্যাট সহ তারিখটি কীভাবে বৈধ করবেন?


106

আমি ফর্ম্যাটটি ব্যবহার করে কোনও ইনপুটটিতে তারিখের বিন্যাসটি বৈধ করতে চাই mm/dd/yyyy

আমি একটি সাইটে কোডগুলি নীচে পেয়েছি এবং তারপরে এটি ব্যবহার করেছি তবে এটি কার্যকর হয় না:

function isDate(ExpiryDate) { 
    var objDate,  // date object initialized from the ExpiryDate string 
        mSeconds, // ExpiryDate in milliseconds 
        day,      // day 
        month,    // month 
        year;     // year 
    // date length should be 10 characters (no more no less) 
    if (ExpiryDate.length !== 10) { 
        return false; 
    } 
    // third and sixth character should be '/' 
    if (ExpiryDate.substring(2, 3) !== '/' || ExpiryDate.substring(5, 6) !== '/') { 
        return false; 
    } 
    // extract month, day and year from the ExpiryDate (expected format is mm/dd/yyyy) 
    // subtraction will cast variables to integer implicitly (needed 
    // for !== comparing) 
    month = ExpiryDate.substring(0, 2) - 1; // because months in JS start from 0 
    day = ExpiryDate.substring(3, 5) - 0; 
    year = ExpiryDate.substring(6, 10) - 0; 
    // test year range 
    if (year < 1000 || year > 3000) { 
        return false; 
    } 
    // convert ExpiryDate to milliseconds 
    mSeconds = (new Date(year, month, day)).getTime(); 
    // initialize Date() object from calculated milliseconds 
    objDate = new Date(); 
    objDate.setTime(mSeconds); 
    // compare input date and parts from Date() object 
    // if difference exists then date isn't valid 
    if (objDate.getFullYear() !== year || 
        objDate.getMonth() !== month || 
        objDate.getDate() !== day) { 
        return false; 
    } 
    // otherwise return true 
    return true; 
}

function checkDate(){ 
    // define date string to test 
    var ExpiryDate = document.getElementById(' ExpiryDate').value; 
    // check date and print message 
    if (isDate(ExpiryDate)) { 
        alert('OK'); 
    } 
    else { 
        alert('Invalid date format!'); 
    } 
}

ভুল হতে পারে সম্পর্কে কোন পরামর্শ?


3
স্ট্যাকওভারফ্লোতে আপনাকে স্বাগতম। আপনি {}টুলবার বোতামের সাহায্যে উত্স কোডটি ফর্ম্যাট করতে পারেন। আমি এবার আপনার জন্য এটি করেছি। এছাড়াও, আপনার সমস্যা সম্পর্কে কিছু তথ্য সরবরাহ করার চেষ্টা করুন: একটি কাজ করে না বর্ণনটি তার সমাধান হিসাবে এটি কার্যকর হিসাবে কার্যকর ।
vlvaro González

কোন ধরণের তারিখের ফর্ম্যাটগুলি আপনি যাচাই করার চেষ্টা করছেন? আপনি কি তারিখগুলির উদাহরণ দিতে পারেন যা বৈধ হওয়া উচিত?
নিক্লাস


উত্তর:


187

আমি মনে করি আপনার সমস্যার সঠিক নিকলাসের সঠিক উত্তর আছে। তদ্ব্যতীত, আমি মনে করি যে নিম্নলিখিত তারিখের বৈধতা ফাংশনটি পড়তে কিছুটা সহজ:

// Validates that the input string is a valid date formatted as "mm/dd/yyyy"
function isValidDate(dateString)
{
    // First check for the pattern
    if(!/^\d{1,2}\/\d{1,2}\/\d{4}$/.test(dateString))
        return false;

    // Parse the date parts to integers
    var parts = dateString.split("/");
    var day = parseInt(parts[1], 10);
    var month = parseInt(parts[0], 10);
    var year = parseInt(parts[2], 10);

    // Check the ranges of month and year
    if(year < 1000 || year > 3000 || month == 0 || month > 12)
        return false;

    var monthLength = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];

    // Adjust for leap years
    if(year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))
        monthLength[1] = 29;

    // Check the range of the day
    return day > 0 && day <= monthLength[month - 1];
};

9
ParseInt দ্বিতীয় যুক্তি ব্যবহার করতে মনে রাখবেন: parseInt(parts[0], 10)। অন্যথায়, সেপ্টেম্বর এর 09একটি অকট্যাল এবং 0 পার্স যেমন পড়া হয়
hugomg

1
কয়েক বছর অবধি লাইনে চলে গেছে এবং এটি আমার বেশিরভাগ সময় সাশ্রয় করেছে, মিষ্টি উত্তরের জন্য ধন্যবাদ!
সাইকোমন্তিস

1
দুর্দান্ত পোস্ট! বৈধতার জন্য প্রয়োজনীয় পার্সিংয়ের সাথে রেজেক্স বিন্যাসকে একত্রিত করে।
জেমস ড্রিঙ্কার্ড

4
আমি আপনাকে এটিতে রেজেস পরিবর্তন করার পরামর্শ দিচ্ছি: / ^ (\ d {2} | \ d {1}) \ / (\ d {2} | \ d {1}) \ / \ d {4} $ / এই উপায় এটি এক অঙ্কের মাস এবং দিন 1/5/2014 ধরে। নমুনার জন্য ধন্যবাদ!
মিচ ল্যাব্রাডর

1
এটি সর্বাধিক সংক্ষিপ্ত, দক্ষ এবং মার্জিত উত্তর। এটি গ্রহণযোগ্য হওয়া উচিত
জোরগাটোন

121

আমি তারিখের বৈধতার জন্য Moment.js ব্যবহার করব

alert(moment("05/22/2012", 'MM/DD/YYYY',true).isValid()); //true

জেএসফিডাল: http://jsfiddle.net/q8y9nbu5/

trueমানটি অ্যান্ড্রে প্রখোরভের ক্রেডিট পার্সিং ক্রেডিটের জন্য যার অর্থ

আপনি মুহুর্তটিকে কঠোরভাবে পার্সিং ব্যবহার করতে সর্বশেষ যুক্তিটির জন্য একটি বুলিয়ান নির্দিষ্ট করতে পারেন। কঠোর বিশ্লেষণের জন্য ফর্ম্যাট এবং ইনপুটটি ডিলিমিটারগুলি সহ হুবহু মিলে যায়।


22
+1 জমা দেওয়া সকলের মধ্যে আমার একমাত্র অত্যন্ত সঠিক উত্তর হিসাবে একেবারে দ্বিতীয় হতে হবে! আপনি নিজের মতো করে পার্সিংয়ের তারিখের মতো জটিল কিছু করতে চান না!
থিওডোর আর স্মিথ

5
মাস ও দিনের জন্য 1-2 ডিজিটের অনুমতি দেওয়ার জন্য "এম / ডি / ওয়াইওয়াইওয়াই" ব্যবহার করুন।
জেমস

3
ভালো তৃতীয় প্যারামিটারটি জানেন যে "সত্যিকারের" "কঠোর পার্সিং ব্যবহার" এর জন্য থাকার বিষয়টি মতেই momentjs.com/docs/#/parsing/string-format
আন্দ্রে Prokhorov

@ রাজন পল আশা করছেন আপনি আপত্তি করবেন না আমি আরও স্পষ্টতার জন্য সামান্য ব্যাখ্যা যোগ করেছি। এটি চাকাগুলি বারবার পুনরায় উদ্বেগ না করাই বুদ্ধিমান, তাই পিউলের উত্তর আমার নম্র মতামতের মধ্যে সেরা
কিক বাটভস্কি

মুহুর্ত (তারিখের স্ট্রিং, 'এমএম / ডিডি / ওয়াইওয়াইওয়াই', সত্য) .আইসভালিড () || মুহূর্ত (তারিখের স্ট্রিং, 'এম / ডিডি / ওয়াইওয়াইওয়াই', সত্য) .আইসভালিড () || মুহূর্ত (তারিখের স্ট্রিং, 'এমএম / ডি / ওয়াইওয়াইওয়াই, সত্য) .আইএসভালিড ();
ইওভা শনিডারম্যান

43

যাচাই করতে নিম্নলিখিত নিয়মিত অভিব্যক্তিটি ব্যবহার করুন:

var date_regex = /^(0[1-9]|1[0-2])\/(0[1-9]|1\d|2\d|3[01])\/(19|20)\d{2}$/;
if (!(date_regex.test(testDate))) {
    return false;
}

এটি আমার জন্য এমএম / ডিডি / ইয়াহির জন্য কাজ করছে।


3
আমরা কীভাবে yYYY-mm-dd বা অবৈধ তারিখ 9834-66-43 এর
সন্দীপ সিং

7
আপনি / ^ [0-9] {4} - (0 [1-9] | 1 [0-2]) - (0 [1-9] | [1-2] [0-9] | 3 [0-1]) yy / yyyy-mm-dd যাচাই করতে।
রবি কান্ত

2
এটি দুর্দান্ত, কারণ আমি একজন ঘৃণা করি রেগেক্স গঠনের জন্য এবং দু'জনের দক্ষতার মতো!
জাদরকে

5
3000 সালে কি ঘটে? :)
এক

4
@ দ্য ওয়ান..ই 3 কে সমস্যা ..: পি
সাথেশ

29

সমস্ত ক্রেডিট এলিয়েন-ইবেিংয়ে যায়

এখানে কেবল অলসদের জন্য আমি yyyy-mm-dd ফর্ম্যাটটির জন্য ফাংশনের একটি কাস্টমাইজড সংস্করণ সরবরাহ করি ।

function isValidDate(dateString)
{
    // First check for the pattern
    var regex_date = /^\d{4}\-\d{1,2}\-\d{1,2}$/;

    if(!regex_date.test(dateString))
    {
        return false;
    }

    // Parse the date parts to integers
    var parts   = dateString.split("-");
    var day     = parseInt(parts[2], 10);
    var month   = parseInt(parts[1], 10);
    var year    = parseInt(parts[0], 10);

    // Check the ranges of month and year
    if(year < 1000 || year > 3000 || month == 0 || month > 12)
    {
        return false;
    }

    var monthLength = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];

    // Adjust for leap years
    if(year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))
    {
        monthLength[1] = 29;
    }

    // Check the range of the day
    return day > 0 && day <= monthLength[month - 1];
}

নেতৃস্থানীয় শূন্যগুলিকে উপেক্ষা করার পরে এটি '2020-5-1 'কে সত্য হিসাবে বৈধতা দেয়। আমি প্রথমে বছরের প্যাটার্নটি পরীক্ষা করে এটি তৈরি করেছি /^(19|20)\d\d$/, পার্স /^(0[0-9]|1[0-2])$/করার /^(0[1-9]|[12][0-9]|3[01])$/আগে মাস এবং দিনটি । তারপর এটি ধন্যবাদ কাজ করে।
হর্মম্যান 60000

ঠিক yyyy-mm-dd ফর্ম্যাটের জন্য তারিখের প্যাটার্নটি পরীক্ষা করার জন্য এই রেজেক্সটি /^\d{4}\-\d{1,2}\-\d{1,2}$/yyyy-mm-dd বা yyyy-md সত্য হিসাবে বৈধ করবে, সুতরাং এটি কেবল প্রতিটি পৃথক তারিখের অংশ নয় দৈর্ঘ্যকে বৈধ করে তোলে। যথাযথ দৈর্ঘ্যের জন্য yyyy-mm-dd পরীক্ষা না করে বছর, মাস এবং তারিখের /^\d{4}\-\d{2}\-\d{2}$/পরিবর্তে সঠিক ব্যবহার করা হচ্ছে।
Hmerman6006

17

আপনি ব্যবহার করতে পারেন Date.parse()

আপনি MDN ডকুমেন্টেশন পড়তে পারেন

তারিখ.পার্স () পদ্ধতিটি একটি তারিখের একটি স্ট্রিং প্রতিনিধিত্বকে বিশ্লেষণ করে এবং 1 জানুয়ারী, 1970, 00:00:00 ইউটিসি বা এনএএন থেকে স্ট্রিংটি স্বীকৃত না হলে বা কিছু ক্ষেত্রে অবৈধ তারিখের মানগুলি অন্তর্ভুক্ত করে (উদাঃ 2015-02-31)।

এবং Date.parseপরীক্ষিত ফলাফল isNaN কিনা

let isValidDate = Date.parse('01/29/1980');

if (isNaN(isValidDate)) {
  // when is not valid date logic

  return false;
}

// when is valid date logic

Date.parseMDN এ ব্যবহার করার পরামর্শ দেওয়া হলে দয়া করে একবার দেখুন


1
তারিখ.পার্স আপনাকে "46/7/17"
ল্যারিবুড

Yyyy /
02/30

11

এটি মিমি / ডিডি / ইয়ি ফর্ম্যাট তারিখগুলির জন্য সূক্ষ্মভাবে কাজ করছে বলে মনে হয়, উদাহরণস্বরূপ:

http://jsfiddle.net/niklasvh/xfrLm/

আপনার কোডটি নিয়ে আমার কেবল সমস্যা ছিল তা হ'ল:

var ExpiryDate = document.getElementById(' ExpiryDate').value;

উপাদান আইডির আগে বন্ধনীগুলির ভিতরে একটি স্থান ছিল। এটি এতে পরিবর্তন করা হয়েছে:

var ExpiryDate = document.getElementById('ExpiryDate').value;

যে ধরণের ডেটা কাজ করছে না সে সম্পর্কিত কোনও বিবরণ ছাড়াই ইনপুট দেওয়ার মতো খুব বেশি কিছু নেই।


9

প্রদত্ত স্ট্রিংটি সঠিক ফর্ম্যাটে থাকলে ('এমএম / ডিডি / ওয়াইওয়াইওয়াই') অন্যথায় এটি মিথ্যা ফিরে আসবে যদি ফাংশনটি সত্য হয়। (আমি এই কোডটি অনলাইনে পেয়েছি এবং এটিকে কিছুটা সংশোধন করেছি)

function isValidDate(date) {
    var temp = date.split('/');
    var d = new Date(temp[2] + '/' + temp[0] + '/' + temp[1]);
    return (d && (d.getMonth() + 1) == temp[0] && d.getDate() == Number(temp[1]) && d.getFullYear() == Number(temp[2]));
}

console.log(isValidDate('02/28/2015'));
            


4

বৈধ তারিখটি পরীক্ষা করার জন্য এখানে একটি স্নিপেট রয়েছে:

function validateDate(dateStr) {
   const regExp = /^(\d\d?)\/(\d\d?)\/(\d{4})$/;
   let matches = dateStr.match(regExp);
   let isValid = matches;
   let maxDate = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
   
   if (matches) {
     const month = parseInt(matches[1]);
     const date = parseInt(matches[2]);
     const year = parseInt(matches[3]);
     
     isValid = month <= 12 && month > 0;
     isValid &= date <= maxDate[month] && date > 0;
     
     const leapYear = (year % 400 == 0)
        || (year % 4 == 0 && year % 100 != 0);
     isValid &= month != 2 || leapYear || date <= 28; 
   }
   
   return isValid
}

console.log(['1/1/2017', '01/1/2017', '1/01/2017', '01/01/2017', '13/12/2017', '13/13/2017', '12/35/2017'].map(validateDate));


3

আপনি যদি ডিডি / এমএম / ইয়াই যাচাই করতে চান তবে ঠিক আছে

function isValidDate(date) {
    var temp = date.split('/');
    var d = new Date(temp[1] + '/' + temp[0] + '/' + temp[2]);
     return (d && (d.getMonth() + 1) == temp[1] && d.getDate() == Number(temp[0]) && d.getFullYear() == Number(temp[2]));
}

alert(isValidDate('29/02/2015')); // it not exist ---> false
            


2

নীচের কোডটি সন্ধান করুন যা সরবরাহ / শুরু এবং শেষ / তারিখগুলিকে বৈধ করতে কোনও সরবরাহিত বিন্যাসের জন্য তারিখের বৈধতা সম্পাদন করতে সক্ষম করে। আরও কিছু ভাল পদ্ধতির হতে পারে তবে এটি সামনে এসেছে। নোট সরবরাহ করা তারিখের ফর্ম্যাট এবং তারিখের স্ট্রিং এক সাথে চলে।

<script type="text/javascript">
    function validate() {

        var format = 'yyyy-MM-dd';

        if(isAfterCurrentDate(document.getElementById('start').value, format)) {
            alert('Date is after the current date.');
        } else {
            alert('Date is not after the current date.');
        }
        if(isBeforeCurrentDate(document.getElementById('start').value, format)) {
            alert('Date is before current date.');
        } else {
            alert('Date is not before current date.');
        }
        if(isCurrentDate(document.getElementById('start').value, format)) {
            alert('Date is current date.');
        } else {
            alert('Date is not a current date.');
        }
        if (isBefore(document.getElementById('start').value, document.getElementById('end').value, format)) {
            alert('Start/Effective Date cannot be greater than End/Expiration Date');
        } else {
            alert('Valid dates...');
        }
        if (isAfter(document.getElementById('start').value, document.getElementById('end').value, format)) {
            alert('End/Expiration Date cannot be less than Start/Effective Date');
        } else {
            alert('Valid dates...');
        }
        if (isEquals(document.getElementById('start').value, document.getElementById('end').value, format)) {
            alert('Dates are equals...');
        } else {
            alert('Dates are not equals...');
        }
        if (isDate(document.getElementById('start').value, format)) {
            alert('Is valid date...');
        } else {
            alert('Is invalid date...');
        }
    }

    /**
     * This method gets the year index from the supplied format
     */
    function getYearIndex(format) {

        var tokens = splitDateFormat(format);

        if (tokens[0] === 'YYYY'
                || tokens[0] === 'yyyy') {
            return 0;
        } else if (tokens[1]=== 'YYYY'
                || tokens[1] === 'yyyy') {
            return 1;
        } else if (tokens[2] === 'YYYY'
                || tokens[2] === 'yyyy') {
            return 2;
        }
        // Returning the default value as -1
        return -1;
    }

    /**
     * This method returns the year string located at the supplied index
     */
    function getYear(date, index) {

        var tokens = splitDateFormat(date);
        return tokens[index];
    }

    /**
     * This method gets the month index from the supplied format
     */
    function getMonthIndex(format) {

        var tokens = splitDateFormat(format);

        if (tokens[0] === 'MM'
                || tokens[0] === 'mm') {
            return 0;
        } else if (tokens[1] === 'MM'
                || tokens[1] === 'mm') {
            return 1;
        } else if (tokens[2] === 'MM'
                || tokens[2] === 'mm') {
            return 2;
        }
        // Returning the default value as -1
        return -1;
    }

    /**
     * This method returns the month string located at the supplied index
     */
    function getMonth(date, index) {

        var tokens = splitDateFormat(date);
        return tokens[index];
    }

    /**
     * This method gets the date index from the supplied format
     */
    function getDateIndex(format) {

        var tokens = splitDateFormat(format);

        if (tokens[0] === 'DD'
                || tokens[0] === 'dd') {
            return 0;
        } else if (tokens[1] === 'DD'
                || tokens[1] === 'dd') {
            return 1;
        } else if (tokens[2] === 'DD'
                || tokens[2] === 'dd') {
            return 2;
        }
        // Returning the default value as -1
        return -1;
    }

    /**
     * This method returns the date string located at the supplied index
     */
    function getDate(date, index) {

        var tokens = splitDateFormat(date);
        return tokens[index];
    }

    /**
     * This method returns true if date1 is before date2 else return false
     */
    function isBefore(date1, date2, format) {
        // Validating if date1 date is greater than the date2 date
        if (new Date(getYear(date1, getYearIndex(format)), 
                getMonth(date1, getMonthIndex(format)) - 1, 
                getDate(date1, getDateIndex(format))).getTime()
            > new Date(getYear(date2, getYearIndex(format)), 
                getMonth(date2, getMonthIndex(format)) - 1, 
                getDate(date2, getDateIndex(format))).getTime()) {
            return true;
        } 
        return false;                
    }

    /**
     * This method returns true if date1 is after date2 else return false
     */
    function isAfter(date1, date2, format) {
        // Validating if date2 date is less than the date1 date
        if (new Date(getYear(date2, getYearIndex(format)), 
                getMonth(date2, getMonthIndex(format)) - 1, 
                getDate(date2, getDateIndex(format))).getTime()
            < new Date(getYear(date1, getYearIndex(format)), 
                getMonth(date1, getMonthIndex(format)) - 1, 
                getDate(date1, getDateIndex(format))).getTime()
            ) {
            return true;
        } 
        return false;                
    }

    /**
     * This method returns true if date1 is equals to date2 else return false
     */
    function isEquals(date1, date2, format) {
        // Validating if date1 date is equals to the date2 date
        if (new Date(getYear(date1, getYearIndex(format)), 
                getMonth(date1, getMonthIndex(format)) - 1, 
                getDate(date1, getDateIndex(format))).getTime()
            === new Date(getYear(date2, getYearIndex(format)), 
                getMonth(date2, getMonthIndex(format)) - 1, 
                getDate(date2, getDateIndex(format))).getTime()) {
            return true;
        } 
        return false;
    }

    /**
     * This method validates and returns true if the supplied date is 
     * equals to the current date.
     */
    function isCurrentDate(date, format) {
        // Validating if the supplied date is the current date
        if (new Date(getYear(date, getYearIndex(format)), 
                getMonth(date, getMonthIndex(format)) - 1, 
                getDate(date, getDateIndex(format))).getTime()
            === new Date(new Date().getFullYear(), 
                    new Date().getMonth(), 
                    new Date().getDate()).getTime()) {
            return true;
        } 
        return false;                
    }

    /**
     * This method validates and returns true if the supplied date value 
     * is before the current date.
     */
    function isBeforeCurrentDate(date, format) {
        // Validating if the supplied date is before the current date
        if (new Date(getYear(date, getYearIndex(format)), 
                getMonth(date, getMonthIndex(format)) - 1, 
                getDate(date, getDateIndex(format))).getTime()
            < new Date(new Date().getFullYear(), 
                    new Date().getMonth(), 
                    new Date().getDate()).getTime()) {
            return true;
        } 
        return false;                
    }

    /**
     * This method validates and returns true if the supplied date value 
     * is after the current date.
     */
    function isAfterCurrentDate(date, format) {
        // Validating if the supplied date is before the current date
        if (new Date(getYear(date, getYearIndex(format)), 
                getMonth(date, getMonthIndex(format)) - 1, 
                getDate(date, getDateIndex(format))).getTime()
            > new Date(new Date().getFullYear(),
                    new Date().getMonth(), 
                    new Date().getDate()).getTime()) {
            return true;
        } 
        return false;                
    }

    /**
     * This method splits the supplied date OR format based 
     * on non alpha numeric characters in the supplied string.
     */
    function splitDateFormat(dateFormat) {
        // Spliting the supplied string based on non characters
        return dateFormat.split(/\W/);
    }

    /*
     * This method validates if the supplied value is a valid date.
     */
    function isDate(date, format) {                
        // Validating if the supplied date string is valid and not a NaN (Not a Number)
        if (!isNaN(new Date(getYear(date, getYearIndex(format)), 
                getMonth(date, getMonthIndex(format)) - 1, 
                getDate(date, getDateIndex(format))))) {                    
            return true;
        } 
        return false;                                      
    }
</script>

নীচে এইচটিএমএল স্নিপেট রয়েছে

<input type="text" name="start" id="start" size="10" value="" />
<br/>
<input type="text" name="end" id="end" size="10" value="" />
<br/>
<input type="button" value="Submit" onclick="javascript:validate();" />

চমৎকার। এই আমি খুঁজছিলাম ছিল।
টার্বো

1

আমি এখানে পাওয়া অন্য পোস্ট থেকে এই কোডটির বেশিরভাগ অংশ টানলাম । আমি আমার উদ্দেশ্যে এটি পরিবর্তন করেছি। এটি আমার যা প্রয়োজন তার জন্য এটি ভালভাবে কাজ করে। এটি আপনার পরিস্থিতির সাথে সহায়তা করতে পারে।

$(window).load(function() {
  function checkDate() {
    var dateFormat = /^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/;
    var valDate = $(this).val();
    if ( valDate.match( dateFormat )) {
      $(this).css("border","1px solid #cccccc","color", "#555555", "font-weight", "normal");
      var seperator1 = valDate.split('/');
      var seperator2 = valDate.split('-');

      if ( seperator1.length > 1 ) {
        var splitdate = valDate.split('/');
      } else if ( seperator2.length > 1 ) {
        var splitdate = valDate.split('-');
      }

      var dd = parseInt(splitdate[0]);
      var mm = parseInt(splitdate[1]);
      var yy = parseInt(splitdate[2]);
      var ListofDays = [31,28,31,30,31,30,31,31,30,31,30,31];

      if ( mm == 1 || mm > 2 ) {
        if ( dd > ListofDays[mm - 1] ) {
          $(this).val("");
          $(this).css("border","solid red 1px","color", "red", "font-weight", "bold");
          alert('Invalid Date! You used a date which does not exist in the known calender.');
          return false;
        }
      }

      if ( mm == 2 ) {
       var lyear = false;
        if ( (!(yy % 4) && yy % 100) || !(yy % 400) ){
          lyear = true;
        }

        if ( (lyear==false) && (dd>=29) ) {
          $(this).val("");
          $(this).css("border","solid red 1px","color", "red", "font-weight", "bold");
          alert('Invalid Date! You used Feb 29th for an invalid leap year');
          return false;
        }

        if ( (lyear==true) && (dd>29) ) {
          $(this).val("");
          $(this).css("border","solid red 1px","color", "red", "font-weight", "bold");
          alert('Invalid Date! You used a date greater than Feb 29th in a valid leap year');
          return false;
        }
     }
    } else {
      $(this).val("");
      $(this).css("border","solid red 1px","color", "red", "font-weight", "bold");
      alert('Date format was invalid! Please use format mm/dd/yyyy');
      return false;
    }
  };

  $('#from_date').change( checkDate );
  $('#to_date').change( checkDate );
});

1

এলিয়ান এবিং উত্তরের অনুরূপ, তবে "\", "/", "।", "-", "" বিসীমাবিদদের সমর্থন করুন

function js_validate_date_dmyyyy(js_datestr)
{
    var js_days_in_year = [ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];
    var js_datepattern = /^(\d{1,2})([\.\-\/\\ ])(\d{1,2})([\.\-\/\\ ])(\d{4})$/;

    if (! js_datepattern.test(js_datestr)) { return false; }

    var js_match = js_datestr.match(js_datepattern);
    var js_day = parseInt(js_match[1]);
    var js_delimiter1 = js_match[2];
    var js_month = parseInt(js_match[3]);
    var js_delimiter2 = js_match[4];
    var js_year = parseInt(js_match[5]);                            

    if (js_is_leap_year(js_year)) { js_days_in_year[2] = 29; }

    if (js_delimiter1 !== js_delimiter2) { return false; } 
    if (js_month === 0  ||  js_month > 12)  { return false; } 
    if (js_day === 0  ||  js_day > js_days_in_year[js_month])   { return false; } 

    return true;
}

function js_is_leap_year(js_year)
{ 
    if(js_year % 4 === 0)
    { 
        if(js_year % 100 === 0)
        { 
            if(js_year % 400 === 0)
            { 
                return true; 
            } 
            else return false; 
        } 
        else return true; 
    } 
    return false; 
}

আপনার দিন এবং মাস পিছনে হয়।
বাউন্ডফোর্ডগ্লোরি

1
function fdate_validate(vi)
{
  var parts =vi.split('/');
  var result;
  var mydate = new Date(parts[2],parts[1]-1,parts[0]);
  if (parts[2] == mydate.getYear() && parts[1]-1 == mydate.getMonth() && parts[0] == mydate.getDate() )
  {result=0;}
  else
  {result=1;}
  return(result);
}

3
যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, কীভাবে এবং / বা কেন এটি সমস্যার সমাধান করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করলে উত্তরের দীর্ঘমেয়াদী মান উন্নত হবে।
ওয়েওওয়েওয়ের

1

মুহূর্তটি এটি সমাধানের জন্য সত্যই ভাল। আমি কেবল তারিখ যাচাইয়ের জন্য জটিলতা যুক্ত করার কারণ দেখছি না ... মুহুর্তটি একবার দেখুন: http://momentjs.com/

এইচটিএমএল:

<input class="form-control" id="date" name="date" onchange="isValidDate(this);" placeholder="DD/MM/YYYY" type="text" value="">

লিপি :

 function isValidDate(dateString)  {
    var dateToValidate = dateString.value
    var isValid = moment(dateToValidate, 'MM/DD/YYYY',true).isValid()
    if (isValid) {
        dateString.style.backgroundColor = '#FFFFFF';
    } else {
        dateString.style.backgroundColor = '#fba';
    }   
};

0

প্রথম স্ট্রিংয়ের তারিখটি জেএস তারিখের ফর্ম্যাটে রূপান্তরিত হয় এবং আবার স্ট্রিং ফর্ম্যাটে রূপান্তরিত হয়, তারপরে এটি মূল স্ট্রিংয়ের সাথে তুলনা করা হয়।

function dateValidation(){
    var dateString = "34/05/2019"
    var dateParts = dateString.split("/");
    var date= new Date(+dateParts[2], dateParts[1] - 1, +dateParts[0]);

    var isValid = isValid( dateString, date );
    console.log("Is valid date: " + isValid);
}

function isValidDate(dateString, date) {
    var newDateString = ( date.getDate()<10 ? ('0'+date.getDate()) : date.getDate() )+ '/'+ ((date.getMonth() + 1)<10? ('0'+(date.getMonth() + 1)) : (date.getMonth() + 1) )  + '/' +  date.getFullYear();
    return ( dateString == newDateString);
}

0

আমরা কাস্টমাইজড ফাংশন বা তারিখের ধরণটি ব্যবহার করতে পারি। আপনার প্রয়োজন অনুসারে কোডের নীচে কাস্টমাইজড ফাংশন রয়েছে দয়া করে এটি পরিবর্তন করুন।

 function isValidDate(str) {
        var getvalue = str.split('-');
        var day = getvalue[2];
        var month = getvalue[1];
        var year = getvalue[0];
        if(year < 1901 && year > 2100){
        return false;
        }
        if (month < 1 && month > 12) { 
          return false;
         }
         if (day < 1 && day > 31) {
          return false;
         }
         if ((month==4 && month==6 && month==9 && month==11) && day==31) {
          return false;
         }
         if (month == 2) { // check for february 29th
          var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
          if (day>29 || (day==29 && !isleap)) {
           return false;
         }
         }
         else{
         return true;

         }
        }

0

এত মৌলিক বিষয়ে এত পুরানো পোস্ট দেখতে পাওয়া অস্বাভাবিক, এতগুলি উত্তর সহ, সেগুলির কোনওটিই ঠিক নয়। (আমি বলছি না যে তাদের কেউই কাজ করে না))

  • এই জন্য একটি লাফ-বছরের সংকল্প রুটিনের প্রয়োজন হয় না। ভাষাটি আমাদের পক্ষে সেই কাজটি করতে পারে।
  • এই জন্য মুহুর্তের প্রয়োজন হয় না।
  • Date.parse()স্থানীয় তারিখের স্ট্রিংয়ের জন্য ব্যবহার করা উচিত নয়। এমডিএন বলছে "ইএস 5 অবধি ডেট. পার্স ব্যবহার করার পরামর্শ দেওয়া হয় না, স্ট্রিং পার্সিং পুরোপুরি বাস্তবায়ন নির্ভর ছিল।" স্ট্যান্ডার্ডটির জন্য একটি (সম্ভাব্য সরলীকৃত) আইএসও 8601 স্ট্রিং প্রয়োজন; অন্য যে কোনও বিন্যাসের জন্য সমর্থন বাস্তবায়ন নির্ভর।
  • new Date(string)বা ব্যবহার করা উচিত নয় , কারণ এটি ডেট. পার্স () ব্যবহার করে।
  • আইএমও লিপের দিনটি বৈধ হওয়া উচিত।
  • বৈধতা ফাংশন অবশ্যই ইনপুট স্ট্রিংটি প্রত্যাশিত ফর্ম্যাটের সাথে মেলে না এমন সম্ভাবনার জন্য অ্যাকাউন্ট করতে হবে। উদাহরণস্বরূপ, '1a / 2a / 3aa', '1234567890', বা 'ab / cd / efgh'।

নিখুঁত রূপান্তর ছাড়াই এখানে একটি কার্যকর, সংক্ষিপ্ত সমাধান। এটি 2018-03-01 হিসাবে 2018-14-29 হিসাবে ডেট কন্সট্রাক্টরের ইচ্ছার সুবিধা গ্রহণ করে। এটি কয়েকটি আধুনিক ভাষার বৈশিষ্ট্য ব্যবহার করে তবে প্রয়োজনে সেগুলি সহজেই মুছে ফেলা হয়। আমি কিছু পরীক্ষা অন্তর্ভুক্ত করেছি।

function isValidDate(s) {
    // Assumes s is "mm/dd/yyyy"
    if ( ! /^\d\d\/\d\d\/\d\d\d\d$/.test(s) ) {
        return false;
    }
    const parts = s.split('/').map((p) => parseInt(p, 10));
    parts[0] -= 1;
    const d = new Date(parts[2], parts[0], parts[1]);
    return d.getMonth() === parts[0] && d.getDate() === parts[1] && d.getFullYear() === parts[2];
}

function testValidDate(s) {
    console.log(s, isValidDate(s));
}
testValidDate('01/01/2020'); // true
testValidDate('02/29/2020'); // true
testValidDate('02/29/2000'); // true
testValidDate('02/29/1900'); // false
testValidDate('02/29/2019'); // false
testValidDate('01/32/1970'); // false
testValidDate('13/01/1970'); // false
testValidDate('14/29/2018'); // false
testValidDate('1a/2b/3ccc'); // false
testValidDate('1234567890'); // false
testValidDate('aa/bb/cccc'); // false
testValidDate(null);         // false
testValidDate('');           // false

-1
  1. জাভাস্ক্রিপ্ট

    function validateDate(date) {
        try {
            new Date(date).toISOString();
            return true;
        } catch (e) { 
            return false; 
        }
    }
  2. JQuery

    $.fn.validateDate = function() {
        try {
            new Date($(this[0]).val()).toISOString();
            return true;
        } catch (e) { 
            return false; 
        }
    }

একটি বৈধ তারিখ স্ট্রিংয়ের জন্য সত্য ফিরে আসে।


-3
var date = new Date(date_string)

'Invalid Date'যেকোন অবৈধ তারিখ_স্তরের জন্য আক্ষরিক ফিরিয়ে দেয় ।

দ্রষ্টব্য: নীচের মন্তব্য দেখুন।


মিথ্যা: new Date("02-31-2000")দেয় Thu Mar 02 2000 00:00:00 GMT-0300 (BRT)
falsarella


যেখানে এটি কাজ করে না সেখানে ব্যবহারের বিষয়ে আরও বিস্তারিত জানাতে দয়া করে মজিলার তারিখ প্যারামিটার ডকুমেন্টেশন থেকে প্রথম নোটটি পড়ুন
falsarella

1
হ্যাঁ, আমি এটি প্রাথমিকভাবে দেখিয়ে দিচ্ছি যে তারা এড-হক পার্স লেখার বিকল্প। উপরের লিঙ্কটি অনুমোদনযোগ্য। ভাল ডক যদিও!
সমিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.