【问题标题】:How to disable range of dates?如何禁用日期范围?
【发布时间】:2019-12-07 16:56:12
【问题描述】:

我需要禁用 l1 和 l2 给出的日期范围。我试过的方法只禁用 l1 即日期 13。

var l1 = new Date("2019-07-13");
var l2 = new Date("2019-07-30");
this.flag =0;

  this.filter2 = function(date) {
    /*if(this.minDate == b){
        flag=1;
        }
        return flag;*/
        var c = date.getDate();
        for(i=l1.getDate();i<=l2.getDate();i++)
        {
            return c!=i;
            continue;
        }
        //return c!=l1.getDate() && c!=l2.getDate();
  }

【问题讨论】:

  • 禁用此日期范围是什么意思?你想创建一个忽略给定 l1 和 l2 之间日期的方法?
  • 代码将不会进一步执行return,这是您在第一次迭代中所做的。
  • Ionut Ardelean 是的,我正在努力做到这一点。
  • @ArunSunny 在下面看到我的答案和 cmets

标签: javascript angularjs angular-material


【解决方案1】:

时间戳很好用,但也请考虑我的 cmets

var l1 = new Date("2019-07-13");
var l2 = new Date("2019-07-30"); 
// l2 will result in a date like this Sun Jul 30 2019 00:00:00 so if you want for it to only work for 2019-08-01, better use directly 2018-08-01
// or set l2 to new Date("2019-07-30 23:59:59.999")

// this method will return true if the date value the function gets as a parameter is outside the given range
// for dates like: 2019-07-12 but as i specified above it will work for today's date since getTime method also consider hours, minutes, seconds and // milliseconds
this.filter2 = function(date) {
  return l1.getTime() < l2.getTime() && (date.getTime() < l1.getTime() || date.getTime() > l2.getTime())
}

console.log(filter2(new Date())) //in today's case given the mentions above it will return true
console.log(filter2(new Date('2019-07-15'))) // false
console.log(filter2(new Date('2019-07-12'))) // true

【讨论】:

  • 如果 l1 的日期比 l2 更晚,则此代码将不起作用。
  • 我同意我没有检查 l1 和 l2,但这不是问题的目的。无论如何都很好,谢谢!
  • 是的,这不是目的,但帖子上没有任何迹象表明 l2 总是会是一个更远的日期,所以我认为我们应该采取额外的预防措施。不客气!
  • 顺便说一下,每个日期在 sn-p 中都返回 false。我认为有一个错误,因为 2019-07-12 不在给定日期之间。
  • 在 l1 和 l2 之间的第一次比较中,我错过了 l2.getTime() 的括号。我的坏
【解决方案2】:

您可以检查日期的毫秒时间戳是否在l1l2的毫秒时间戳之间

var l1 = new Date("2019-07-30");
var l2 = new Date("2019-07-13");

function filter(date) {
  if (date instanceof Date && l1 instanceof Date && l2 instanceof Date) {
      return l1.getTime() < l2.getTime() ? !(date.getTime() >= l1.getTime() && date.getTime() <= l2.getTime()) : !(date.getTime() >= l2.getTime() && date.getTime() <= l1.getTime())
    } else {
      return false;
    }
}

console.log(filter(new Date("2019-07-13")));
console.log(filter(new Date("2019-07-12")));

【讨论】:

  • 如果输入参数不正确,在它们之间切换 l1 和 l2 并不是最好的选择。在应用程序中,这可能会出现奇怪的用户体验问题。虽然验证不应该让你走到这一步。
  • 你的意思是如果某些输入不是日期?如果是这样,我添加了一段代码来检查它们是否都是日期。
  • 不,我的意思是,在现实生活中的应用程序中,如果用户设置的日期错误,解决方案是在它们之间切换,如果 l1 > l2 它应该有验证问题比方说,用户界面,该方法不应该以任何一种方式工作。有一种方法可以根据 l1 和 l2 过滤掉日期,无论 l1 和 l2 以什么及时的顺序给出,这可能会令人困惑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-14
相关资源
最近更新 更多