3

我有一个剑道日期选择器,它将日期格式设置为“ 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

4 回答 4

2

您将获得新日期的 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"
  }
});
于 2014-06-10T06:10:03.767 回答
1

Javascript 的默认日期格式为 MM/DD/YYYY

供参考遵循日期格式

于 2014-06-10T05:58:49.623 回答
0

当您提交时,我几乎会完全忽略 Kendo 的方法并在验证函数中使用moment.js 。您可以将每个日期、最小值、最大值和候选日期格式化为 YYYY-MM-DD,然后使用内置.isAfter().diff() 查询进行比较。请记住,您必须考虑他们是否输入了某些内容,而不仅仅是从日历中选择它,因此您必须确保您有 2 位数的天数。您还必须考虑是否有人输入了高于剑道控制能力的令人发指的内容,例如 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注释掉的行中获得时间,您可以添加它。我只是不相信年份,因为“0001”将翻译为“1901”。所以我会说将时间附加到dateField对象将是可行的方法,并且您可以在其上硬编码 timemoment(year + '-' + month + '-' + day + 'T' + hours + ':' + mins + ':' + secs + 'Z').utc()和 min like moment('1900-1-1T00:00:00Z'),但00:00:00Z如果您不设置它已经隐含。

于 2015-03-26T01:06:05.697 回答
-1

您可以使用 KendoUI 的 datepicker 方法,如下所示:

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

这里的价值将保持价值,如Tue Oct 11 2015 11:17:48 GMT+0530 (India Standard Time)

现在您可以使用简单的条件来比较值

编辑

你可以参考这个小提琴的演示

一旦你有了 javascript 日期格式,你就可以使用条件来比较日期,就像我在演示代码中所做的那样

于 2014-06-10T06:03:41.713 回答