[英]Jquery set date to input value
我有start_date datepicker,并且在date_result文本字段上显示了一些计算结果之后,它的工作正常,这是代码:
jQuery(document).ready(function($) {
$('start_date, #week_number, #year_number, #month_number').change(function() {
var yr = $('#year_number').val() * 365;
var wk = $('#week_number').val() * 7;
var days = yr + wk;
var endDate = new Date($('#start_date').val());
endDate.setDate(endDate.getDate() + Number(days));
$('#date_result').val(endDate.getFullYear() + '-' + (endDate.getMonth() + 1) + '-' + endDate.getDate());
});
});
这是: 小提琴
问题: date_result输入值为空,如何用计算的日期设置此值?
<input type="text" value="" size="20" name="form[date_result]" id="date_result">
通常,在Javascript中添加月份可能并不总是能按预期工作,因为某些情况和边缘情况可能会导致意外结果。
例如, setMonth()
函数仅接受介于0到11之间的月份值,并且还接受day参数,并且在使用此范围之外的值时可以做一些有趣的事情:
如果您指定的参数超出预期范围,则
setMonth()
尝试相应地更新Date
对象中的日期信息。 例如,如果将15用作monthValue
,则年份将增加1,并将3用作月份。
考虑使用特定日期的库
我的建议是考虑使用像Moment.js或Date.js这样的库,它们是专门为处理这种类型的行为而设计的,可能会使您的代码更易于阅读:
$('#start_date, #month_number').change(function() {
var months = $('#month_number').val();
// Get your date as a moment (specifying the format you want to parse in)
var end = moment($('#start_date').val(),"YYYY-MM-DD");
// Add your months
end.add(Number(months),'months');
// You can even ease formatting (along with output format)
$('#end_date').val(end.format('YYYY-MM-DD'));
});
例
<!DOCTYPE html> <html> <head> <script src="https://cdn.jsdelivr.net/momentjs/2.10.6/moment-with-locales.min.js"></script> <script src="https://code.jquery.com/jquery-2.1.4.js"></script> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>JS Bin</title> </head> <body> <input type="date" id="start_date"> <select id="month_number"> <option value="0">Number of months to add</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> </select> <input type="text" id="end_date" placeholder="End Date"> <script> $(function() { $('#start_date, #month_number').change(function() { var months = $('#month_number').val(); // Get your date as a moment var end = moment($('#start_date').val(), "YYYY-MM-DD"); // Add your months end.add(Number(months), 'months'); // You can even ease formatting $('#end_date').val(end.format('YYYY-MM-DD')); }); }); </script> </body> </html>
jsFiddle删除name属性,然后尝试一次
请打开开发者控制台以查看日志
<input type="text" value="" size="20" id="date_result" placeholder="End Date">
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.