Jquery将日期设置为输入值

时间:2016-06-01 12:24:55

标签: javascript jquery date

我有 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());
    });
});

以下是:Fiddle

问题: date_result输入值为空,如何将此值设置为计算日期?

<input type="text" value="" size="20" name="form[date_result]" id="date_result"> 

2 个答案:

答案 0 :(得分:0)

在Javascript中添加月份通常可能无法始终按预期工作,因为某些方案和边缘情况可能会导致意外结果。

例如,setMonth()函数只接受0-11之间的月份值,并且还接受day参数,并且当使用此范围之外的值时可以执行一些有趣的事情:

  

如果您指定的参数超出预期范围,   setMonth()尝试更新Date对象中的日期信息   因此。例如,如果您对monthValue使用15,则年份将为   增加1,将使用3个月。

考虑使用特定日期的资料库

我的建议是考虑使用像Moment.jsDate.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'));
});

示例

enter image description here

&#13;
&#13;
<!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>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

jsFiddle删除name属性并尝试一次

请打开开发者控制台以查看日志

foreach($email as $key=>$emails)
{
   if($emails == "")
   unset($email[$key]);
}