我有一个剑道日期选择器,设置为将日期格式设置为“ MM / dd / yyyy ”。我想检查使用jquery / javascript,如果剑道日期选择器日期不能是未来日期和日期必须大于'01 / 01/1900'。
我面临的问题是当我在脚本中使用新日期时,它就像Date {Tue Jun 10 2014 11:17:48 GMT+0530 (India Standard Time)}
。我的剑道日期选择器具有06/02/2012
格式的值。我不知道如何比较它。
我知道kendo日期选择器中的一个名为:parseFormats的方法,其中我必须提供解析格式,但我不知道Javascript / Jquery的defualt日期格式,我不知道该怎么做。
Kendo日期选择器
@(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))
答案 0 :(得分:2)
您正在获取新Date的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日期的更多信息: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"
}
});
答案 1 :(得分:1)
Javascript的默认日期格式为MM / DD / YYYY
参考参考Date Format
答案 2 :(得分:0)
我完全忽略了剑道的方法,并在提交时在验证功能中使用moment.js。您可以将每个日期,分钟,最大值和候选值格式化为YYYY-MM-DD,然后使用内置.isAfter()
和.diff()
queries进行比较。请记住,如果他们输入了某些内容,您必须考虑到这一点,而不仅仅是从日历中选择它,因此您必须确保您有两位数的日期。你还必须考虑是否有人进入了比剑道对手可以处理的高得离谱的东西,如1/1/0001和1/1/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
注释掉的行中获得时间,则可以添加该示例。从那以后我就不会相信这一年&#34; 0001&#34;将翻译为&#34; 1901&#34;。所以我想说,将时间添加到dateField
对象是可行的方法,你可以像moment(year + '-' + month + '-' + day + 'T' + hours + ':' + mins + ':' + secs + 'Z').utc()
和moment('1900-1-1T00:00:00Z')
之类的那样对时间进行硬编码,尽管如果您未设置00:00:00Z
,则已隐含{}。
答案 3 :(得分:-1)
您可以使用KendoUI的datepicker方法,如下所示:
var datepicker = $("#datepicker").data("kendoDatePicker");
var value = datepicker.value();
此值将保持值Tue Oct 11 2015 11:17:48 GMT+0530 (India Standard Time)
现在您可以使用简单条件来比较值
修改强>
您可以参考此fiddle
中的演示一旦你有了javascript日期格式,就可以使用条件比较日期,就像我在演示代码中那样