Javascript中日期之间的迭代

时间:2016-06-02 19:04:36

标签: javascript jquery date

我有两个表单字段,用于存储前一个脚本的日期输出,每个输入的yearstart和yearend都填充了YYYY-MM-DD格式的日期。该脚本由嵌套的onchange函数触发,通过从另一个下拉列表中选择一年来填充这两个框,然后触发嵌套函数来填充第二个下拉选择项。

<input type="text" name="yearstart" id="yearstart" value="" readonly/>
<input type="text" name="yearend" id="yearend" value="" readonly/>
<select id="weekselect"></select>

<script>
    function getWeeks() {
        document.getElementById("weekselect").innerHTML = "";

        var yearstart = new Date(document.getElementById('yearstart').value);
        var yearend = new Date(document.getElementById('yearend').value);
        var iDate = new Date(yearstart);

        while (iDate < yearend) {
            var newele = document.createElement('option');
            newele.text = toJSONLocal(iDate);
            document.getElementById('weekselect').appendChild(newele);
            iDate.setDate(iDate.getDate() + 7)
        }
    }
</script>

它正在发挥作用,但遗憾的是,如果我选择一年的价值大于已经选择的那一年,那么只有工作,所以2015年,2016年然后工作,但我还得到两年的日期而不是一个,所以我是不知道我错过了什么。我只能推测脚本在值更新之前触发,但嵌套脚本执行的顺序应该阻止它。

任何想法的人?

1 个答案:

答案 0 :(得分:0)

要比较2个Date对象,请使用.getTime()获取自1970年1月1日以来的毫秒数。

工作代码:

while (iDate.getTime() < yearend.getTime()) {

但是,DOM操作有时不与JS运行时同步,因此输入的.value可能返回错误的日期。你把一些参数传递给函数但从未使用它。

查看我的小提琴 - https://jsfiddle.net/atao634u/

function getDates() {
  var year = document.getElementById('year').value;
  year = new Date(year, 0, 1, 0, 0, 0, 0);
  if (year.getDay() == 0) {
  day=1;
  year = year.setDate(day);
  year = new Date(year);
  }
  else if (year.getDay() != 1) {
    day = 8-(year.getDay());
    year = year.setDate(day);
    year = new Date(year);
    }
  getendDates(year);
  document.getElementById('yearstart').value = year;

}
function getendDates(yearstart) {
  var year = (document.getElementById('year').value);
  year++;
  year = new Date(year, 0, 1, 0, 0, 0, 0);
  if (year.getDay() == 0) {
  day=1;
  year = year.setDate(day);
  year = new Date(year);
  }
  else if (year.getDay() != 1) {
    day = 7-(year.getDay());
    year = year.setDate(day);
    year = new Date(year);
    }
  document.getElementById('yearend').value = year;
  getWeeks(yearstart, year);
}


function getWeeks(yearstart, yearend) {
  document.getElementById("weekselect").innerHTML="";
  //var yearstart = new Date(document.getElementById('yearstart').value);
  //var yearend = new Date(document.getElementById('yearend').value);
  var iDate = new Date(yearstart);

  while (iDate.getTime() < yearend.getTime()) {
    var newele = document.createElement('option');
    newele.text = toJSONLocal(iDate);
    document.getElementById('weekselect').appendChild(newele);
    iDate.setDate(iDate.getDate() + 7)
  }
}

function toJSONLocal (date) {
    var local = new Date(date);
    local.setMinutes(date.getMinutes() - date.getTimezoneOffset());
    return local.toJSON().slice(0, 10);
}