Формат даты по умолчанию для Javascript/Jquery

У меня есть средство выбора даты кендо, которое настроено на форматирование даты как "MM / dd / yyyy". Я хочу проверить с помощью jquery/javascript, что если дата выбора кендо не должна быть будущей датой, а дата должна быть больше, чем "01/01/1900".

Проблема, с которой я сталкиваюсь, это когда я беру новую дату в сценарии, это как Date {Tue Jun 10 2014 11:17:48 GMT+0530 (India Standard Time)}, и мой сборщик дат кэндо имеет значение в 06/02/2012 формат. Я не знаю, как это сравнить.

Я знаю метод выбора даты в кендо: parseFormats, в котором мне нужно указать формат разбора, но я не знаю формат даты по умолчанию в Javascript/Jquery и не знаю, как это сделать.

Сборщик кендо

@(Html.Kendo().DatePickerFor(m => m.DateOfBirth).Format("MM/dd/yyyy").HtmlAttributes(new { style = "width:100%", Placeholder = "mm/dd/yyyy" }).Max(DateTime.Now.Date).Min(new DateTime(1900, 1, 2).Date))

4 ответа

Решение

Вы получаете значение toString новой даты. Попробуй это

var d = new Date(datepicker.value()); // looked at the docs, no obvious shortcut
if (d.getFullYear()<1900) alert("nope");

или же

var now = new Date(), d = new Date(datepicker.value());
now.setHours(0,0,0,0); // normalise
if (d.getTime() > now.getTime()) alert("Please no future dates");

Более подробная информация о JS Dates: MDN

Вы также можете затруднить выбор неправильных дат

$("#datetimepicker").kendoDateTimePicker({
  value:new Date(),
  min: new Date(1900,0,1), // JS months are 0 based!
  max: new Date()
});

И, наконец, добавить подтверждение

$("#MyForm").kendoValidator({
  rules: {
    //implement your custom date validation
    dateValidation: function (dateField) {
        var currentDate = Date.parse($(dateField).val());
        //Check if Date parse is successful
        if (!currentDate) {
            return false;
        }

        var now = new Date(), then=new Date(1900,0,1),d = new Date($(dateField).val());
        now.setHours(0,0,0,0); // normalise
        return d.getTime() >= then.getTime() && d.getTime() < now.getTime()  
    }
  },
  messages: {
    //Define your custom validation massages
    required: "Date is required message",
    dateValidation: "Invalid date message"
  }
});

Формат даты по умолчанию для Javascript - ММ / ДД / ГГГГ

Для справки следуйте формат даты

Я бы в значительной степени проигнорировал методы Кендо и использовал бы момент.js в функции проверки при отправке. Вы можете отформатировать каждую дату, мин, макс и кандидат в формате ГГГГ-ММ-ДД, а затем сравнить с помощью встроенного .isAfter() а также .diff() запросы. Помните, что вы должны учитывать, что они вводят что-то, а не просто выбирать это из календаря, поэтому вы должны убедиться, что у вас есть 2-значные дни. Вы также должны учитывать, вступает ли кто-то в нечто возмутительное, что выше, чем может иметь управление Kendo, например, 1/1/0101 и 01.01.9000. Код ниже имеет дело с этим. Вы также можете - хотя я не включил это здесь в свой код, но сделал это в моей скрипке - захотите учесть, если год также состоит из 2 цифр:

$('#btnValidate').click(function(){
     var minDate = moment('1900-1-1');
     var maxDate = moment(Date.parse(new Date()));

     //var dateField = $("#datepicker").data("kendoDatePicker").value();
     var dateField = $("#datepicker").val();

     // Moment requires YYYY-MM-DD
     dateField = dateField.replace('/','-').replace('/','-');
     var year = dateField.split('-')[2];
     var month = dateField.split('-')[0];
     var day = dateField.split('-')[1];

     if (month < 10 && month.toString().length == 1) { month = "0" + month; }
     if (day < 10 && day.toString().length == 1) { day = "0" + day; }
     dateField = year + '-' + month + '-' + day;

     // Enter into moment and compare
     var dateToConsider = moment(dateField);
     var lowerLimitBreached = dateToConsider.diff(minDate) < 0;
     var upperBoundBreached = dateToConsider.isAfter(maxDate);

     alert('min: ' + moment(minDate).format('MM/DD/YYYY'));
     alert('max: ' + moment(maxDate).format('MM/DD/YYYY'));
     alert('our candidate: ' + moment(dateToConsider).format('MM/DD/YYYY'));

     if(lowerLimitBreached || upperBoundBreached)
         alert('Invalid date');
     else
         alert('Valid date');
 });

http://jsfiddle.net/navyjax2/k5xx9xpu/

Обратите внимание, что пример не показывает использование времени, но вы можете добавить это, если вы получили время от .data("kendoDatePicker").value закомментированная строка. Я просто не стал бы доверять году, так как "0001" будет переводиться как "1901". Так что я бы сказал, что добавление времени к dateField объект будет в порядке, и вы можете жестко запрограммировать время на нем, как moment(year + '-' + month + '-' + day + 'T' + hours + ':' + mins + ':' + secs + 'Z').utc() а мин как moment('1900-1-1T00:00:00Z'), хоть 00:00:00Z уже подразумевается, если вы не установите его.

Вы можете использовать метод datepicker в KendoUI, как показано ниже:

  var datepicker = $("#datepicker").data("kendoDatePicker");
  var value = datepicker.value();

Здесь значение будет иметь значение как Tue Oct 11 2015 11:17:48 GMT+0530 (India Standard Time)

Теперь вы можете использовать простое условие для сравнения значений

РЕДАКТИРОВАТЬ

Вы можете сослаться на демо на этой скрипке

Если у вас есть формат даты в javascript, вы можете использовать условие для сравнения дат, как в демонстрационном коде

Другие вопросы по тегам