Формат даты по умолчанию для 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, вы можете использовать условие для сравнения дат, как в демонстрационном коде