2013-07-17 36 views
6

Tôi đang cố gắng làm một trang đơn giản lấy ngày (kiểu nhập văn bản) và sau khi ngày được nhập, một trường khác sẽ thêm 7 ngày vào đầu vào và hiển thị ngày (+7 ngày) trong một đầu vào văn bản. Kiến thức về jQuery của tôi bị giới hạn nên tôi có thể có một lỗi nhỏ ...jQuery thêm 7 ngày cho đến ngày (văn bản kiểu đầu vào và đầu ra)

<html> 
<head> 
<title>Date Plus 7 Days</title> 
<script type="text/javascript"> 
$(document).ready(function(){ 
    function DateFromString(str){ 
     str = str.split(/\D+/); 
     str = new Date(str[2],str[0]-1,(parseInt(str[1])+7)); 
     return MMDDYYYY(str); 
    } 
    function MMDDYYYY(str) { 
     var ndateArr = str.toString().split(' '); 
     var Months = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'; 
     return (parseInt(Months.indexOf(ndateArr[1])/4)+1)+'/'+ndateArr[2]+'/'+ndateArr[3]; 
    } 

    function Add7Days() { 
     var date = $('#start_date').val(); 
     var ndate = DateFromString(date); 
     return ndate; 
    } 

    $('#start_date').change(function(){ 
     $('#end_date') = Add7Days(); 
    }) 

}); 

</script> 
</head> 
<body> 

Start Date 
<input type="text" id="start_date" value=''> 
<br> 
End date 
<input type="text" id="end_date" value=''> 

</body> 
</html> 

Tôi đã làm gì sai?

Cảm ơn!

+4

Bạn đang rời khỏi nó lên để người dùng nhập ngày theo định dạng bạn mong đợi. Bạn không bao giờ nên tin tưởng người dùng. Vì bạn đã tận dụng jQuery, hãy xem xét thanh công cụ date của jQuery UI. Điều này sẽ cung cấp cho bạn lịch và các giá trị mục nhập ngày đáng tin cậy hơn nhiều. – Brombomb

Trả lời

10

bạn đã cố gán một đối tượng cho $('#end_date'). jQuery đề với điều này theo một cách khác bằng cách thay đổi giá trị của hộp nhập liệu bằng cách tận dụng .val('value-here')

Hãy thử điều này:

$('#start_date').change(function(){ 
    $('#end_date').val(Add7Days()); 
}); 

Xem fiddle này: http://jsfiddle.net/zydZ2/

Ngoài ra, Moment.JS là rất tốt cho phân tích cú pháp và thao tác ngày, tôi thật sự khuyên bạn nên kiểm tra xem: http://momentjs.com/

Hy vọng điều này sẽ hữu ích!

+0

Kết quả của '$()' không phải là một hàm; đó là một đối tượng – Ian

+0

@Tôi xin lỗi, bạn đúng 100%. Cập nhật để phản ánh điều này. –

+0

Cảm ơn sự giúp đỡ! –

7

chức năng để thêm 7 ngày để một ngày hiện tại có thể đạt được bằng cách sử dụng

var today_date = new Date() 
alert(today_date) 
today_date.setDate(today_date.getDate() + 7) 
alert(today_date) 

này sẽ thêm bảy ngày để một ngày hiện tại nếu nó 31 hơn nó sẽ làm cho nó thứ 7 của tháng tiếp theo

hy vọng trợ giúp này

2

Có thể bạn sử dụng tính năng JQuery & JqueryUI datepicker để làm điều đó.

$('#start_date').datepicker({ 
     dateFormat: 'mm/dd/yy', 
     minDate: 0, 

    }); 
    $("#end_date").datepicker({ 
     dateFormat: 'mm/dd/yy', 
     minDate: 7, 

    }); 

    var _dt = new Date(); 
    var _dt = _dt.setDate(_dt.getDate());  
    $("#start_date").datepicker("setDate","mm/dd/yy", _dt); 
    $("#end_date").datepicker("setDate", "mm/dd/yy", _dt);  

bạn có thể tham khảo này http://jsfiddle.net/o9grLdf0/12/

min = 0 cho đầu vào STARTDATE = ngày hôm nay và min = 7 có nghĩa là hiện nay + 7 ngày cho ENDDATE

+0

vui lòng giải thích một chút, cách mã này giải quyết vấn đề của người dùng. – Hamad

0
function listDatesBetweenTwoDates(S_dateA, S_dateB) { 
    var O_dateA = moment(S_dateA).add(1, 'd'); 
    var O_dateB = moment(S_dateB).add(1, 'd'); 
    var O_itr = moment.twix(O_dateA, O_dateB).iterate("days"); 
    var A_range = []; 
    while (O_itr.hasNext()) { 
     A_range.push(O_itr.next().toDate()) 
    } 
    return A_range; 
} 
Các vấn đề liên quan