2017-07-08 80 views
-1
I have one dropdown and two textbox on my page. Now i have to bind the value 
based on dropdown value. 

My question is when i am select This Week from dropdown that time it will 
display wrong date when first date of month on second textbox. 

看看下面的例子。它在月的其他日期工作正常,但当 选择'07/01/2017'那么它的显示是这样的'01/06/2017'而不是 '01/07/2017'第二个文本框,当我们选择本周日期筛选不适用于每月的第一个月

$(document).on("change","#selectDates",function() { 
 
      var dropValue = document.getElementById('selectDates').value; 
 
      //All 
 
      if (dropValue == "1") { 
 
       $('#txtDateFrom').val(''); 
 
       $('#txtDateTo').val(''); 
 
      } 
 
       //Today 
 
      else if (dropValue == "2") { 
 
       var back_GTM = new Date(); 
 
       $('#txtDateFrom').val(Back_date(back_GTM)); 
 
       $('#txtDateTo').val(Back_date(back_GTM)); 
 
       
 
      } 
 
       //This Week 
 
      else if (dropValue == "3") { 
 
       //var curr = new Date; // get current date 
 
       var curr = new Date('07/01/2017'); // get current date 
 
       var first = curr.getDate() - curr.getDay(); // First day is the day of the month - the day of the week 
 
       var last = first + 6; // last day is the first day + 6 
 

 
       var firstday = new Date(curr.setDate(first)); 
 
       var lastday = new Date(curr.setDate(last)); 
 

 
       $('#txtDateFrom').val(Back_date(firstday)); 
 
       $('#txtDateTo').val(Back_date(lastday)); 
 
       
 
      } 
 
      }); 
 
      
 
      function Back_date(back_GTM) { 
 
      var b_dd = back_GTM.getDate(); 
 
      var b_mm = back_GTM.getMonth() + 1; 
 
      var b_yyyy = back_GTM.getFullYear(); 
 
      if (b_dd < 10) { 
 
       b_dd = '0' + b_dd 
 
      } 
 
      if (b_mm < 10) { 
 
       b_mm = '0' + b_mm 
 
      } 
 
      return back_date = b_dd + '/' + b_mm + '/' + b_yyyy; 
 
     }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="select-style"> 
 
       <select id="selectDates"> 
 
        <option value="1" selected>All</option> 
 
        <option value="2">Today</option> 
 
        <option value="3">This Week</option> 
 
        </select> 
 
      </div> 
 
      <br />   <br /> 
 

 
      <div class="input-group input-large" data-date="13/07/2013" data-date-format="dd/mm/yyyy"> 
 
       <span class="input-group-addon">From</span> 
 
       <input type="text" id="txtDateFrom" class="form-control dpd1" name="from"> 
 
       <span class="input-group-addon">To</span> 
 
       <input type="text" id="txtDateTo" class="form-control dpd2" name="to"> 
 
      </div>

回答

1

您应该创建其中每周重叠2个月的情况下两个日期的对象。

因为当您将日期设置为-5时,从2017年7月1日起,它会将日期正确计算到星期日6月25日。
但现在,这个月已经改变了!

当您将日期设置为星期的最后一天(即1)时,月份保持在日期对象中的六月。

因此,有两个不同的日期对象分别处理日期是修复。

$(document).on("change","#selectDates",function() { 
 
    var dropValue = document.getElementById('selectDates').value; 
 
    //All 
 
    if (dropValue == "1") { 
 
    $('#txtDateFrom').val(''); 
 
    $('#txtDateTo').val(''); 
 
    } 
 
    //Today 
 
    else if (dropValue == "2") { 
 
    var back_GTM = new Date(); 
 
    $('#txtDateFrom').val(Back_date(back_GTM)); 
 
    $('#txtDateTo').val(Back_date(back_GTM)); 
 

 
    } 
 
    //This Week 
 
    else if (dropValue == "3") { 
 
    //var curr = new Date; // get current date 
 
    var curr = new Date('07/01/2017'); // get current date 
 
    var curr2 = new Date('07/01/2017'); // get current date - Second date object. 
 
    
 
    var first = curr.getDate() - curr.getDay(); // First day is the day of the month - the day of the week 
 
    var last = first + 6; // last day is the first day + 6 
 

 
    var firstday = new Date(curr.setDate(first)); 
 
    var lastday = new Date(curr2.setDate(last)); 
 

 
    $('#txtDateFrom').val(Back_date(firstday)); 
 
    $('#txtDateTo').val(Back_date(lastday)); 
 

 
    } 
 
}); 
 

 
function Back_date(back_GTM) { 
 
    var b_dd = back_GTM.getDate(); 
 
    var b_mm = back_GTM.getMonth() + 1; 
 
    var b_yyyy = back_GTM.getFullYear(); 
 
    if (b_dd < 10) { 
 
    b_dd = '0' + b_dd 
 
    } 
 
    if (b_mm < 10) { 
 
    b_mm = '0' + b_mm 
 
    } 
 
    return back_date = b_dd + '/' + b_mm + '/' + b_yyyy; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div class="select-style"> 
 
    <select id="selectDates"> 
 
    <option value="1" selected>All</option> 
 
    <option value="2">Today</option> 
 
    <option value="3">This Week</option> 
 
    </select> 
 
</div> 
 
<br />   <br /> 
 

 
<div class="input-group input-large" data-date="13/07/2013" data-date-format="dd/mm/yyyy"> 
 
    <span class="input-group-addon">From</span> 
 
    <input type="text" id="txtDateFrom" class="form-control dpd1" name="from"> 
 
    <span class="input-group-addon">To</span> 
 
    <input type="text" id="txtDateTo" class="form-control dpd2" name="to"> 
 
</div>

+0

谢谢它节省了我的时间.. –

+0

我回到了我的第一个想法...使用两个日期对象。因为设置第一天前的最后一天不会在月底附近解决同一问题。如果你设置“06/28/2017”...结果是从2017年7月25日到2017年7月1日,这是错误的。 –

+0

Yup.it显示错误的日期。 –

0

为了创建新的日期,你应该通过每月为prameters年,月指数和日期。 举例如下:

var curr = new Date(2017,6,1); 

按照需要被固定在你的代码:

// Needs to fix this 
var curr = new Date('07/01/2017'); 
+0

感谢重播..! –

相关问题