Câu trả lời:
Chỉ cần mở rộng câu trả lời hợp nhất. phương pháp mở rộng này hoạt động bằng cách sử dụng plugin xác thực jQuery. Nó sẽ xác thực ngày và số
jQuery.validator.addMethod("greaterThan",
function(value, element, params) {
if (!/Invalid|NaN/.test(new Date(value))) {
return new Date(value) > new Date($(params).val());
}
return isNaN(value) && isNaN($(params).val())
|| (Number(value) > Number($(params).val()));
},'Must be greater than {0}.');
Để dùng nó:
$("#EndDate").rules('add', { greaterThan: "#StartDate" });
hoặc là
$("form").validate({
rules: {
EndDate: { greaterThan: "#StartDate" }
}
});
code
if (value == 0) {return true; } else if (! / không hợp lệ | NaN / ...code
var startDate = new Date($('#startDate').val());
var endDate = new Date($('#endDate').val());
if (startDate < endDate){
// Do something
}
Điều đó nên làm điều đó tôi nghĩ
Đến bữa tiệc hơi muộn nhưng đây là phần của tôi
Date.parse(fromDate) > Date.parse(toDate)
Đây là chi tiết:
var from = $("#from").val();
var to = $("#to").val();
if(Date.parse(from) > Date.parse(to)){
alert("Invalid Date Range");
}
else{
alert("Valid date Range");
}
Tham chiếu jquery.validate.js và jquery-1.2.6.js. Thêm lớp startDate vào hộp văn bản ngày bắt đầu của bạn. Thêm lớp endDate vào hộp văn bản ngày kết thúc của bạn.
Thêm khối tập lệnh này vào trang của bạn: -
<script type="text/javascript">
$(document).ready(function() {
$.validator.addMethod("endDate", function(value, element) {
var startDate = $('.startDate').val();
return Date.parse(startDate) <= Date.parse(value) || value == "";
}, "* End date must be after start date");
$('#formId').validate();
});
</script>
Hi vọng điêu nay co ich :-)
Tôi chỉ đang mày mò với câu trả lời của danteuno và thấy rằng mặc dù có ý tốt, nhưng thật đáng buồn là nó đã bị hỏng trên một số trình duyệt không phải là IE. Điều này là do IE sẽ khá nghiêm ngặt về những gì nó chấp nhận làm đối số cho hàm Date
tạo, nhưng những người khác thì không. Ví dụ: Chrome 18 cung cấp
> new Date("66")
Sat Jan 01 1966 00:00:00 GMT+0200 (GTB Standard Time)
Điều này khiến mã sử dụng đường dẫn "so sánh ngày tháng" và tất cả đều đi xuống từ đó (ví dụ: new Date("11")
lớn hơn new Date("66")
và điều này rõ ràng là ngược lại với hiệu quả mong muốn).
Do đó, sau khi cân nhắc, tôi đã sửa đổi mã để ưu tiên cho đường dẫn "số" hơn đường dẫn "ngày tháng" và xác thực rằng đầu vào thực sự là số bằng phương pháp tuyệt vời được cung cấp trong Xác thực số thập phân trong JavaScript - IsNumeric () .
Cuối cùng, mã trở thành:
$.validator.addMethod(
"greaterThan",
function(value, element, params) {
var target = $(params).val();
var isValueNumeric = !isNaN(parseFloat(value)) && isFinite(value);
var isTargetNumeric = !isNaN(parseFloat(target)) && isFinite(target);
if (isValueNumeric && isTargetNumeric) {
return Number(value) > Number(target);
}
if (!/Invalid|NaN/.test(new Date(value))) {
return new Date(value) > new Date(target);
}
return false;
},
'Must be greater than {0}.');
Giá trị ngày tháng từ các trường văn bản có thể được tìm nạp bằng phương thức .val () của jquery như
var datestr1 = $('#datefield1-id').val();
var datestr2 = $('#datefield2-id').val();
Tôi thực sự khuyên bạn nên phân tích cú pháp các chuỗi ngày trước khi so sánh chúng. Đối tượng Date của Javascript có phương thức parse () -, nhưng nó chỉ hỗ trợ các định dạng ngày tháng của Hoa Kỳ (YYYY / MM / DD). Nó trả về mili giây kể từ đầu kỷ nguyên unix, vì vậy bạn có thể chỉ cần so sánh các giá trị của mình với> hoặc <.
Nếu bạn muốn các định dạng khác nhau (ví dụ: ISO 8661), bạn cần sử dụng các cụm từ thông dụng hoặc thư viện date.js miễn phí.
Nếu bạn muốn trở thành người dùng siêu giỏi, bạn có thể sử dụng bộ chọn ngày jquery ui thay vì trường văn bản. Có một biến thể công cụ chọn ngày cho phép nhập phạm vi ngày:
http://www.filamentgroup.com/lab/date_range_picker_using_jquery_ui_16_and_jquery_ui_css_framework/
Vì vậy, tôi cần quy tắc này là tùy chọn và không có đề xuất nào ở trên là tùy chọn. Nếu tôi gọi phương thức, nó đang hiển thị theo yêu cầu ngay cả khi tôi đặt nó thành giá trị.
Đây là cuộc gọi của tôi:
$("#my_form").validate({
rules: {
"end_date": {
required: function(element) {return ($("#end_date").val()!="");},
greaterStart: "#start_date"
}
}
});//validate()
addMethod
Câu trả lời của tôi không mạnh mẽ như câu trả lời được xếp hạng cao nhất của Mike E., nhưng tôi đang sử dụng trình chọn ngày JqueryUI để buộc chọn ngày. Nếu ai đó có thể cho tôi biết cách đảm bảo ngày tháng là số và có phương thức là tùy chọn sẽ rất tuyệt, nhưng hiện tại phương pháp này phù hợp với tôi:
jQuery.validator.addMethod("greaterStart", function (value, element, params) {
return this.optional(element) || new Date(value) >= new Date($(params).val());
},'Must be greater than start date.');
Trong javascript / jquery, hầu hết các nhà phát triển sử dụng so sánh Từ & Đến ngày là chuỗi, không chuyển đổi thành định dạng ngày. Cách đơn giản nhất để so sánh từ ngày lớn hơn với ngày là.
Date.parse(fromDate) > Date.parse(toDate)
Luôn phân tích cú pháp từ và đến ngày trước khi so sánh để có kết quả chính xác
Tôi thích những gì Franz nói, vì đó là những gì tôi đang sử dụng: P
var date_ini = new Date($('#id_date_ini').val()).getTime();
var date_end = new Date($('#id_date_end').val()).getTime();
if (isNaN(date_ini)) {
// error date_ini;
}
if (isNaN(date_end)) {
// error date_end;
}
if (date_ini > date_end) {
// do something;
}
$(document).ready(function(){
$("#txtFromDate").datepicker({
minDate: 0,
maxDate: "+60D",
numberOfMonths: 2,
onSelect: function(selected) {
$("#txtToDate").datepicker("option","minDate", selected)
}
});
$("#txtToDate").datepicker({
minDate: 0,
maxDate:"+60D",
numberOfMonths: 2,
onSelect: function(selected) {
$("#txtFromDate").datepicker("option","maxDate", selected)
}
});
});
Hoặc Truy cập vào liên kết này
jQuery('#from_date').on('change', function(){
var date = $(this).val();
jQuery('#to_date').datetimepicker({minDate: date});
});
function endDate(){
$.validator.addMethod("endDate", function(value, element) {
var params = '.startDate';
if($(element).parent().parent().find(params).val()!=''){
if (!/Invalid|NaN/.test(new Date(value))) {
return new Date(value) > new Date($(element).parent().parent().find(params).val());
}
return isNaN(value) && isNaN($(element).parent().parent().find(params).val()) || (parseFloat(value) > parseFloat($(element).parent().parent().find(params).val())) || value == "";
}else{
return true;
}
},jQuery.format('must be greater than start date'));
}
function startDate(){
$.validator.addMethod("startDate", function(value, element) {
var params = '.endDate';
if($(element).parent().parent().parent().find(params).val()!=''){
if (!/Invalid|NaN/.test(new Date(value))) {
return new Date(value) < new Date($(element).parent().parent().parent().find(params).val());
}
return isNaN(value) && isNaN($(element).parent().parent().find(params).val()) || (parseFloat(value) < parseFloat($(element).parent().parent().find(params).val())) || value == "";
}
else{
return true;
}
}, jQuery.format('must be less than end date'));
}
Hy vọng điều này sẽ giúp :)
Đầu tiên, bạn tách các giá trị của hai hộp nhập bằng cách sử dụng chức năng tách. sau đó nối giống nhau theo thứ tự ngược lại. sau khi concat Nation phân tích cú pháp nó thành số nguyên. sau đó so sánh hai giá trị trong câu lệnh if. ví dụ: 1> 20-11-2018 2> 21-11-2018
sau khi tách và ghép các giá trị mới để so sánh 20181120 và 20181121 sau đó so sánh giống nhau.
var date1 = $('#datevalue1').val();
var date2 = $('#datevalue2').val();
var d1 = date1.split("-");
var d2 = date2.split("-");
d1 = d1[2].concat(d1[1], d1[0]);
d2 = d2[2].concat(d2[1], d2[0]);
if (parseInt(d1) > parseInt(d2)) {
$('#fromdatepicker').val('');
} else {
}
cái này sẽ hoạt động
$.validator.addMethod("endDate", function(value, element) {
var startDate = $('#date_open').val();
return Date.parse(startDate) <= Date.parse(value) || value == "";
}, "* End date must be after start date");
Nếu định dạng được đảm bảo là đúng YYYY / MM / DD và hoàn toàn giống nhau giữa hai trường thì bạn có thể sử dụng:
if (startdate > enddate) {
alert('error'
}
Như một so sánh chuỗi