2014-06-10 125 views
2

我有一個設置爲日期格式爲「MM/dd/yyyy」的劍道日期選擇器。我想檢查使用jquery/JavaScript,如果劍道日期選擇器日期不能是未來日期和日期必須大於'01/01/1900'。默認日期格式的JavaScript/Jquery

我面臨的問題是當我在腳本中記錄新的日期時,它就像Date {Tue Jun 10 2014 11:17:48 GMT+0530 (India Standard Time)}。我的劍道日期選擇器的格式爲06/02/2012。我不知道如何比較它。

我知道kendo日期選擇器中名爲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)) 
+0

類似的問題在這裏.... http://stackoverflow.com/questions/29245661/moment-js-date-comparison-catching-min-range/29245934#29245934 .... – vapcguy

回答

2

您正在獲取toString值o f新日期。試試這個

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

+0

@Dhwani你可以檢查,如果'(d.getFullYear()> getdate()。getFullYear())' –

+0

@mplungjan我有一個關於.getTime如何工作? – Dhwani

1

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

僅供參考後續Date Format

-1

您可以使用KendoUI的日期選擇方法如下所示:

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

這裏值將舉行類似Tue Oct 11 2015 11:17:48 GMT+0530 (India Standard Time)

值現在你可以用簡單的條件來比較值

編輯

您可以在此fiddle

演示是指一旦你的JavaScript日期格式您可以使用條件來比較日期,因爲我在演示代碼中有

+0

可能datepicker的值是06/02/2012而Dhwani正在使用新的Date()並沒有意識到他正在獲取它的toString – mplungjan

+1

@mplungjan請你詳細說明一下。我無法聯繫到您 –

+0

您的代碼無法正常工作。你的日期是1900/02/01而不是1900/01/01,因爲JS月份是0。如果您輸入日期<允許的日期,日期選擇器也會返回空值 - 請參閱http://jsfiddle.net/tJ6EB/ – mplungjan

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註釋掉的行中獲得時間,則可以添加該示例。我只是不會相信這一年,因爲「0001」會翻譯爲「1901」。所以,我要說的是,附加的時間到dateField對象將要走的路,你可以在它硬編碼的時間像moment(year + '-' + month + '-' + day + 'T' + hours + ':' + mins + ':' + secs + 'Z').utc()和最小像moment('1900-1-1T00:00:00Z'),雖然00:00:00Z如果你不設置它已經暗示。