JavaScript/JQuery的默认日期格式

3
我有一个kendo日期选择器,日期格式设置为“MM/dd/yyyy”。我想使用jquery/javascript检查kendo日期选择器日期是否不是未来日期,并且日期必须大于“01/01/1900”。
我遇到的问题是当我在脚本中取新日期时,它像这样:Date {Tue Jun 10 2014 11:17:48 GMT+0530 (India Standard Time)}。而我的kendo日期选择器的值是以06/02/2012的格式表示的。我不知道如何进行比较。
我知道kendo日期选择器中有一个名为parseFormats的方法,其中我必须提供解析格式,但我不知道Javascript/Jquery的默认日期格式,也不知道如何实现它。 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))

类似的问题在这里... http://stackoverflow.com/questions/29245661/moment-js-date-comparison-catching-min-range/29245934#29245934 - vapcguy
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"
  }
});

1
未来日期验证怎么样? - Dhwani
@Dhwani,你可以这样检查:如果(d.getFullYear()>getdate().getFullYear()) - Just code
@mplungjan 我对.getTime的工作原理有些困惑? - Dhwani
在应用时区校正后,它获取日期对象自纪元(1970年1月1日)以来的毫秒数。 - mplungjan

1

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

如需参考,请查看日期格式


0

我会完全忽略Kendo的方法,而在提交时使用moment.js中的验证函数。您可以将每个日期、最小值、最大值和候选项格式化为YYYY-MM-DD,然后使用内置的.isAfter().diff()queries进行比较。请记住,您必须考虑到他们输入内容的情况,而不仅仅是从日历中选择,因此您必须确保您有两位数字的日期。您还必须考虑到如果有人输入了一些超出Kendo控件处理范围的荒谬内容,例如1/1/0001和1/1/9000。下面的代码解决了这个问题。您还可以(尽管我没有在我的代码中包含它,但在我的fiddle中包含了它)考虑年份只有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()这样在其上硬编码时间,并且min像moment('1900-1-1T00:00:00Z'),虽然如果您没有设置它,00:00:00Z已经被隐含了。

-1
您可以使用如下所示的KendoUI日期选择器方法:
  var datepicker = $("#datepicker").data("kendoDatePicker");
  var value = datepicker.value();

这里的value将会保存类似于Tue Oct 11 2015 11:17:48 GMT+0530 (India Standard Time)的值

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

编辑

你可以参考这个fiddle上的演示

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


很可能datepicker的值是06/02/2012,而Dhwani正在使用new Date(),并没有意识到他得到了它的toString。 - mplungjan
1
@mplungjan,您能否详细说明一下?我无法理解您的意思。 - Chirag Vidani
你的代码没有正常工作。你的日期是1900/02/01而不是1900/01/01,因为JS的月份是从0开始计数的。此外,如果你输入一个小于允许日期的日期,日期选择器将返回null - 请参见http://jsfiddle.net/tJ6EB/。 - mplungjan
@mplungjan,无论是1900/02/01还是1900/01/01,我们都在尝试提供参考代码而不是完美的代码。 - Chirag Vidani
1
我不同意。如果初学者得到有错误的参考代码,他们会变得非常困惑。请尽可能提供完美的代码。 - mplungjan
@ChiragVidani,你的fiddle显示01/01/0001是一个有效的日期。我创建了一个fork来展示更好的验证方式:http://jsfiddle.net/navyjax2/k5xx9xpu/。 - vapcguy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接