मान्य तिथि जो jQuery के साथ प्रारंभ दिनांक से अधिक है


105

मैं jQuery में जाँच / सत्यापन कैसे करूँ कि क्या अंतिम तिथि [टेक्स्टबॉक्स] स्टार्ट डेट [टेक्स्टबॉक्स] से अधिक है?


यहाँ एक समाधान है: stackoverflow.com/questions/17169772/…
एड्रियन पी।

जवाबों:


177

बस fusions जवाब का विस्तार। यह एक्सटेंशन विधि jQuery के मान्य प्लगइन का उपयोग करके काम करती है। यह दिनांक और संख्याओं को मान्य करेगा

jQuery.validator.addMethod("greaterThan", 
function(value, element, params) {

    if (!/Invalid|NaN/.test(new Date(value))) {
        return new Date(value) > new Date($(params).val());
    }

    return isNaN(value) && isNaN($(params).val()) 
        || (Number(value) > Number($(params).val())); 
},'Must be greater than {0}.');

इसके प्रयेाग के लिए:

$("#EndDate").rules('add', { greaterThan: "#StartDate" });

या

$("form").validate({
    rules: {
        EndDate: { greaterThan: "#StartDate" }
    }
});

आप इसे दो टेक्स्ट बॉक्स के साथ कैसे उपयोग करते हैं?
Cros

1
मुझे अपने ऐप में रिक्त समाप्ति तिथियों की अनुमति देने के लिए इसे थोड़ा संशोधित करना पड़ा, लेकिन इसने बल्क किया। codeअगर (मान == 0) {वापसी सच है; } और अगर (! / अमान्य | NaN / ...code
फ्रैंक ल्यूक

3
बग चेतावनी: मुझे पता है कि सवाल तारीखों के बारे में है, लेकिन यह कोड विज्ञापित संख्याओं के लिए काम नहीं करेगा। मैंने एक उत्तर जोड़ा है जिसमें बताया गया है कि क्यों और कैसे जिसमें फिक्स भी शामिल है।
जॉन

1
@Cros jQuery.validator.addMethod ("zip_code_checking", function (value, element) {return jQuery ('# zip_endvalue'))। Val ()> jQuery ('# zip_startvalue')।) ()}, "* ज़िप कोड अंत कोड। मूल्य ज़िप कोड प्रारंभ मूल्य से अधिक होना चाहिए ");
बालासुरेश असैथम्बी

यह Google क्रोम में एक त्रुटि देता है। यदि आप 12 से कम या 31 से अधिक मूल्य पास करते हैं, तो यह एक तारीख के रूप में पार्स किया जा रहा है, और इसलिए इसे तारीख के रूप में भी मान्य किया गया है। मुझे इसे दो तरीकों में अलग करना था (जल्दी में), लेकिन मैं एक अधिक उपयुक्त समाधान खोजना पसंद करूंगा!
4

84
var startDate = new Date($('#startDate').val());
var endDate = new Date($('#endDate').val());

if (startDate < endDate){
// Do something
}

मुझे यह सोचना चाहिए


सही? धन्यवाद! कोई प्लगइन की जरूरत है। : पी
वेल विक्टस

1
लागू करने के लिए अच्छा और आसान है, हालांकि jQuery.validate कमाल है
mknopf

बहुत बहुत धन्यवाद .. इतना आसान।
निमित जोशी

एकमात्र समस्या यह है कि जब आपके पास एक तिथि सीमा होती है जिसमें दो वर्ष का समय लगता है। 27-06-2015 से 02-02-2016 .... यह ठीक से मान्य नहीं होगा
हिमांशी

ऐसी तिथि सीमा दो वर्ष के भीतर फैली हुई है। 27-06-2015 से 02-02-2016, मेरे लिए ठीक से मान्य है।
थमराई टी

19

पार्टी में थोड़ा लेट हो गया लेकिन यहां मेरा हिस्सा है

Date.parse(fromDate) > Date.parse(toDate)

यहाँ विस्तार है:

var from = $("#from").val();
var to = $("#to").val();

if(Date.parse(from) > Date.parse(to)){
   alert("Invalid Date Range");
}
else{
   alert("Valid date Range");
}

14

संदर्भ jquery.validate.js और jquery-1.2.6.js। अपनी आरंभ तिथि टेक्स्टबॉक्स में एक आरंभिक कक्षा जोड़ें। अपनी अंतिम तिथि के पाठ बॉक्स में एक EndDate वर्ग जोड़ें।

इस स्क्रिप्ट ब्लॉक को अपने पेज में जोड़ें: -

<script type="text/javascript">
    $(document).ready(function() {
        $.validator.addMethod("endDate", function(value, element) {
            var startDate = $('.startDate').val();
            return Date.parse(startDate) <= Date.parse(value) || value == "";
        }, "* End date must be after start date");
        $('#formId').validate();
    });
</script>

उम्मीद है की यह मदद करेगा :-)


मुझे यह तकनीक पसंद है
whamal

13

मैं सिर्फ डांटुनो के जवाब के साथ छेड़छाड़ कर रहा था और पाया कि अच्छे इरादों के साथ, दुख की बात है कि यह कई ब्राउज़रों पर टूट गया है जो आईई नहीं है । ऐसा इसलिए है क्योंकि IE इस बारे में काफी सख्त होगा कि यह Dateकंस्ट्रक्टर के तर्क के रूप में क्या स्वीकार करता है , लेकिन अन्य नहीं करेंगे। उदाहरण के लिए, क्रोम 18 देता है

> new Date("66")
  Sat Jan 01 1966 00:00:00 GMT+0200 (GTB Standard Time)

यह कोड "तुलना दिनांक" पथ लेने का कारण बनता है और यह सब वहां से डाउनहिल हो जाता है (जैसे new Date("11")कि इससे अधिक है new Date("66")और यह स्पष्ट रूप से वांछित प्रभाव के विपरीत है)।

इसलिए विचार करने के बाद मैंने "तिथियों" पथ पर "संख्याओं" पथ को प्राथमिकता देने के लिए कोड को संशोधित किया और पुष्टि की कि इनपुट वास्तव में जावास्क्रिप्ट में निर्दिष्ट उत्कृष्ट विधि के साथ संख्यात्मक है - जावास्क्रिप्ट () में

अंत में, कोड बन जाता है:

$.validator.addMethod(
    "greaterThan",
    function(value, element, params) {
        var target = $(params).val();
        var isValueNumeric = !isNaN(parseFloat(value)) && isFinite(value);
        var isTargetNumeric = !isNaN(parseFloat(target)) && isFinite(target);
        if (isValueNumeric && isTargetNumeric) {
            return Number(value) > Number(target);
        }

        if (!/Invalid|NaN/.test(new Date(value))) {
            return new Date(value) > new Date(target);
        }

        return false;
    },
    'Must be greater than {0}.');

यह काम करता है, लेकिन यह ओपेरा और एफएफ, किसी भी विचार में काम करने के लिए नहीं मिल सकता है?
कोडेड

: यह सत्यापन त्रुटि के साथ आता है, भले ही चयनित प्रारंभ तिथि चयनित तिथि के बाद हो
कोडेड

5

पाठ फ़ील्ड से दिनांक मानों को jquery के .val () विधि द्वारा प्राप्त किया जा सकता है

var datestr1 = $('#datefield1-id').val();
var datestr2 = $('#datefield2-id').val();

मैं उन्हें तुलना करने से पहले तारीख के तार को पार्स करने की जोरदार सलाह दूंगा। जावास्क्रिप्ट की तिथि ऑब्जेक्ट में एक पार्स () - विधि है, लेकिन यह केवल यूएस दिनांक प्रारूपों (YYYY / MM / DD) का समर्थन करता है। यह यूनिक्स युग की शुरुआत से मिलीसेकंड देता है, इसलिए आप बस> या <के साथ अपने मूल्यों की तुलना कर सकते हैं।

यदि आप अलग-अलग प्रारूप चाहते हैं (उदाहरण के लिए आईएसओ 8661), तो आपको नियमित अभिव्यक्ति या मुफ्त तारीख का उपयोग करने की आवश्यकता है। पुस्तकालय।

यदि आप सुपर-उपयोगकर्ता बनना चाहते हैं, तो आप टेक्स्टफील्ड के बजाय jquery ui डेटपिकर्स का उपयोग कर सकते हैं। एक डेटपिकर वैरिएंट है जो डेट रेंज में प्रवेश करने की अनुमति देता है:

http://www.filamentgroup.com/lab/date_range_picker_using_jquery_ui_16_and_jquery_ui_css_framework/


5

इसलिए मुझे इस नियम के वैकल्पिक होने की आवश्यकता थी और उपरोक्त सुझावों में से कोई भी वैकल्पिक नहीं है। यदि मैं उस विधि को कहता हूं जो आवश्यकता के अनुसार दिखाई दे रही है, भले ही मैंने इसे मान की आवश्यकता के लिए सेट किया हो।

यह मेरा आह्वान है:

  $("#my_form").validate({
    rules: {
      "end_date": {
        required: function(element) {return ($("#end_date").val()!="");},
        greaterStart: "#start_date"
      }
    }
  });//validate()

मेरा addMethodमाइक ई के टॉप रेटेड उत्तर के रूप में मजबूत नहीं है, लेकिन मैं तारीख चयन के लिए मजबूर करने के लिए जेक्वेरीयू डेटपिकर का उपयोग कर रहा हूं। अगर कोई मुझे बता सकता है कि यह सुनिश्चित करने के लिए कि तिथियां संख्याएं हैं और विधि वैकल्पिक है जो बहुत अच्छा होगा, लेकिन अभी के लिए यह विधि निम्नलिखित है:

jQuery.validator.addMethod("greaterStart", function (value, element, params) {
    return this.optional(element) || new Date(value) >= new Date($(params).val());
},'Must be greater than start date.');

4

जावास्क्रिप्ट / jquery में, ज्यादातर डेवलपर तारीख प्रारूप में परिवर्तित किए बिना, स्ट्रिंग की तुलना की गई तिथि से तिथि का उपयोग करता है। तारीख से तुलना करने का सबसे सरल तरीका अधिक तारीख है।

Date.parse(fromDate) > Date.parse(toDate)

सटीक परिणाम प्राप्त करने के लिए तुलना करने से पहले और तिथि से हमेशा पार्स करें


यह प्रश्न का उत्तर प्रदान नहीं करता है। एक बार आपके पास पर्याप्त प्रतिष्ठा होने पर आप किसी भी पोस्ट पर टिप्पणी कर पाएंगे ; इसके बजाय, ऐसे उत्तर प्रदान करें जिन्हें पूछने वाले से स्पष्टीकरण की आवश्यकता न हो । - समीक्षा से
मामून

यह सवाल का समाधान है। मैंने कोशिश की और जवाब दिया।
कुणाल ब्राह्मे

2

मुझे पसंद है कि फ्रांज ने क्या कहा, क्योंकि मैं जो उपयोग कर रहा हूं: पी

var date_ini = new Date($('#id_date_ini').val()).getTime();
var date_end = new Date($('#id_date_end').val()).getTime();
if (isNaN(date_ini)) {
// error date_ini;
}
if (isNaN(date_end)) {
// error date_end;
}
if (date_ini > date_end) {
// do something;
}

2
$(document).ready(function(){
   $("#txtFromDate").datepicker({
        minDate: 0,
        maxDate: "+60D",
        numberOfMonths: 2,
        onSelect: function(selected) {
          $("#txtToDate").datepicker("option","minDate", selected)
        }
    });

    $("#txtToDate").datepicker({
        minDate: 0,
        maxDate:"+60D",
        numberOfMonths: 2,
        onSelect: function(selected) {
           $("#txtFromDate").datepicker("option","maxDate", selected)
        }
    });
});

या इस लिंक पर जाएँ



1
function endDate(){
    $.validator.addMethod("endDate", function(value, element) {
      var params = '.startDate';
        if($(element).parent().parent().find(params).val()!=''){
           if (!/Invalid|NaN/.test(new Date(value))) {
               return new Date(value) > new Date($(element).parent().parent().find(params).val());
            }
       return isNaN(value) && isNaN($(element).parent().parent().find(params).val()) || (parseFloat(value) > parseFloat($(element).parent().parent().find(params).val())) || value == "";              
      }else{
        return true;
      }
      },jQuery.format('must be greater than start date'));

}

function startDate(){
            $.validator.addMethod("startDate", function(value, element) {
            var params = '.endDate';
            if($(element).parent().parent().parent().find(params).val()!=''){
                 if (!/Invalid|NaN/.test(new Date(value))) {
                  return new Date(value) < new Date($(element).parent().parent().parent().find(params).val());
            }
           return isNaN(value) && isNaN($(element).parent().parent().find(params).val()) || (parseFloat(value) < parseFloat($(element).parent().parent().find(params).val())) || value == "";
                 }
                        else{
                     return true;
}

    }, jQuery.format('must be less than end date'));
}

आशा है कि यह मदद करेगा :)


0

पहले आप विभाजन फ़ंक्शन का उपयोग करके दो इनपुट बॉक्स के मूल्यों को विभाजित करते हैं। फिर उसी को उल्टे क्रम में रखें। राष्ट्र के बाद इसे पूर्णांक के लिए पार्स करता है। तो दो मानों की तुलना यदि कथन में है। जैसे .1> 20-11-2018 2> 21-11-2018

20181120 और 20181121 की तुलना के लिए नए मूल्यों को विभाजित और संक्षिप्त करने के बाद उसी की तुलना करें।

var date1 = $('#datevalue1').val();
var date2 = $('#datevalue2').val();
var d1 = date1.split("-");
var d2 = date2.split("-");

d1 = d1[2].concat(d1[1], d1[0]);
d2 = d2[2].concat(d2[1], d2[0]);

if (parseInt(d1) > parseInt(d2)) {

    $('#fromdatepicker').val('');
} else {

}

कृपया इस समाधान का स्पष्टीकरण जोड़ें
Jan ýerný


-2

यदि प्रारूप सही होने की गारंटी है YYYY / MM / DD और दो क्षेत्रों के बीच समान है तो आप उपयोग कर सकते हैं:

if (startdate > enddate) {
   alert('error'
}

एक स्ट्रिंग तुलना के रूप में


मैं jquery में शुरुआत और अंत को कैसे परिभाषित करूं?
इनपुट

मैं मान रहा हूँ कि वे नियमित रूप से तार हैं। आप उन्हें इस तरह पढ़ते हैं कि $ (# शुरुआत: इनपुट) .val () और $ (# एंडडेट: इनपुट) .val ()
नादिया अलरामली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.