التحقق من أن نهاية التاريخ هي أكبر من تاريخ البدء مع مسج

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

  •  08-07-2019
  •  | 
  •  

سؤال

كيف يمكنني التحقق من/في مسج التحقق من صحة ما إذا كان تاريخ نهاية [النص] أكبر من تاريخ البدء [النص]?

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

المحلول

ومجرد توسيع قبالة اندماج الإجابة. هذه الطريقة تمديد يعمل باستخدام التحقق من صحة البرنامج المساعد مسج. وسوف تحقق من تواريخ وأرقام

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" }
    }
});

نصائح أخرى

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

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

وهذا ينبغي أن نفعل ذلك أعتقد

وليتل في وقت متأخر إلى الحزب ولكن هنا هو من جهتي

<اقتباس فقرة>   

و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");
}

وjquery.validate.js المرجعية ومسج-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>

ويساعد هذا الأمل: -)

وكنت مجرد العبث danteuno في الإجابة وجدت أنه على الرغم من حسن النية، للأسف انها كسر في العديد من المتصفحات التي هي لا IE. وذلك لأن IE سوف تكون صارمة جدا حول ما يقبل على أنها حجة إلى منشئ Date، ولكن لن الآخرين. على سبيل المثال، والكروم 18 يعطي

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

وهذا يؤدي رمز لاتخاذ مسار "مقارنة التواريخ"، وسارت الامور بشكل منحدر من هناك (على سبيل المثال new Date("11") أكبر من new Date("66") وهذا هو الواضح عكس النتيجة المرجوة).

وذلك بعد النظر I تعديل التعليمات البرمجية لإعطاء الأولوية لمسار "أرقام" على مسار "مواعيد" والتحقق من أن المدخلات هو في الواقع رقمي مع أسلوب ممتاز المنصوص عليه في <لأ href = "HTTPS: // ستاكوفيرفلوو. / الأسئلة / 18082 / صحة-الأرقام في وجافا سكريبت، isnumeric كوم "> التحقق من صحة الأرقام العشرية في جافا سكريبت - IsNumeric ()

في النهاية، يصبح رمز:

$.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}.');

والقيم التاريخ من حقول النص يمكن جلبه .val مسج ل() طريقة مثل

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

وأنا أنصح بشدة على تحليل سلاسل التاريخ قبل مقارنتها. كائن تاريخ جافا سكريبت لديه تحليل () - الطريقة، ولكن يدعم فقط الولايات المتحدة تنسيقات التاريخ (YYYY / MM / DD). تقوم بإرجاع ميلي ثانية منذ بداية عصر يونيكس، لذلك يمكنك ببساطة مقارنة القيم الخاصة بك مع> أو <.

إذا كنت تريد أشكال مختلفة (مثل ISO 8661)، تحتاج إلى اللجوء إلى تعبيرات عادية أو المكتبة date.js الحرة.

إذا كنت تريد أن تكون فائقة المستخدم فيندلي، يمكنك استخدام datepickers مسج واجهة المستخدم بدلا من الحقول النصية. هناك البديل منتقي التاريخ الذي يسمح لدخول نطاقات التاريخ:

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

وهكذا كنت بحاجة هذه القاعدة أن يكون اختياري وأيا من الاقتراحات المذكورة أعلاه اختيارية. إذا كنت استدعاء الأسلوب أنه يظهر كما هو مطلوب حتى لو تعيينها إلى الحاجة قيمة.

وهذه هي دعوتي:

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

وبلدي addMethod ليس قويا كما مايك E. في أعلى تصنيف الجواب، ولكن أنا باستخدام منتقي التاريخ JqueryUI لفرض اختيار التاريخ. اذا كان شخص ما يمكن أن تقول لي كيفية التأكد من تواريخ وأرقام ولها طريقة تكون اختيارية التي من شأنها أن تكون كبيرة، ولكن الآن هذا الأسلوب يعمل بالنسبة لي:

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.');

وأنا مثل ما قال فرانز، لأن ما أنا باستخدام: P

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;
}
$(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)
        }
    });
});

أو زيارة هذا الرابط

jQuery('#from_date').on('change', function(){
    var date = $(this).val();
    jQuery('#to_date').datetimepicker({minDate: date});  
});

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

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

وتحليل دائما من وإلى تاريخ قبل المقارنة للحصول على نتائج دقيقة

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'));
}

والأمل وهذا سيساعد على:)

وأول لتقسيم قيم مربع اثنين من المدخلات باستخدام وظيفة الانقسام. ثم CONCAT نفسها في ترتيب عكسي. بعد أمة CONCAT تحليل ذلك إلى عدد صحيح. ثم مقارنة قيمتين في الدخول إذا البيان.   EG.1> 20-11-2018 2> 21-11-2018

وبعد انقسام وCONCAT قيم جديدة للمقارنة 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 {

}

وهذا يجب أن تعمل

$.validator.addMethod("endDate", function(value, element) {
            var startDate = $('#date_open').val();
            return Date.parse(startDate) <= Date.parse(value) || value == "";
        }, "* End date must be after start date");

إذا ويضمن التنسيق لتكون صحيحة YYYY / MM / DD وبالضبط نفس الشيء بين الحقلين ثم يمكنك استخدام:

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

وعلى سبيل المقارنة سلسلة

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