日期过滤器不适用于每月的第一天

时间:2017-07-08 03:59:49

标签: javascript jquery

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>
<input type="text" [(ngModel)]="obj.name">
<select [(ngModel)]="obj.x">
    <option *ngFor="let x in xx" [ngValue]="x">{{x}}</option>
</select>

2 个答案:

答案 0 :(得分:1)

您应该为一周重叠2个月的情况创建两个日期对象。

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

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

因此,有两个不同的日期对象来分别操作日期是修复。

$(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>

答案 1 :(得分:0)

要创建新日期,您应将年,月份索引和月份日期作为参数传递。 示例如下:

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

需要在代码中修复以下内容:

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