如何从包含日期范围[Typescript / Angular]

时间:2019-12-23 08:19:32

标签: javascript typescript

我是Typescript的初学者。我有一个字符串形式的日期范围。

var range="7-01-2018 VS 5-01-2019";

现在只是为了解释您而硬编码。但是也只会在以后以这种字符串形式出现。我必须提取2018并将其存储在某个变量中,例如startYear,还必须提取2019并将其存储在endYear变量中。这样以后我就可以比较它们并应用验证。

我尝试使用:

  1. 子字符串(开始,结束)

我的代码有效,但是问题是当选择两位数的日期时,字符串将改变其长度。例如:

  1. 7-01-2018 VS 25-01-2019
  2. 17-01-2018 VS 5-01-2019
  3. 27-01-2018 VS 25-01-2019

在这些情况下,startend具有不同的含义。我现在应该怎么办。请帮助我。

我的方法是:

myValidator() {

  range="7-01-2018 VS 5-01-2019";

  startYear=range.substring(5,8);

  endYear=range.substring(18,21);

  if(endYear<startYear) {
    console.log("Invalid range");
  }
}

现在,我打算使用split()。然后将字符串分成不同的部分,然后编写一些逻辑。但是split的问题在于两者之间有一个VS。但是,对于separator参数,我可以给-符号。如果我错了,请纠正我。

5 个答案:

答案 0 :(得分:2)

  • 使用String.prototype.match
const range = '7-01-2018 VS 25-01-2019'


const [...range.matchAll(/\d{0,2}-\d{0,2}-(\d{0,4})/g)].map((date)=> date[1])

答案 1 :(得分:2)

你是正确的分裂会很好

myValidator() {

      range="7-01-2018 VS 5-01-2019";

      startYear=parseInt(range.split("VS")[0].split("-")[2])

      endYear=parseInt(range.split("VS")[1].split("-")[2])

      if(endYear<startYear) {
        console.log("Invalid range");
      }
    }

答案 2 :(得分:2)

全部一行

navigation/mobile_navigation.xml

答案 3 :(得分:1)

使用splitDatereduce

console.log("7-01-2018 VS 25-01-2019: ", checkRange("7-01-2018 VS 25-01-2019"));
console.log("7-01-2019 VS 25-01-2018: ", checkRange("7-01-2019 VS 25-01-2018"));

function checkRange(inputRange) {
  const range = inputRange.split(" VS ");
  const getYear = dateStr => 
    new Date(dateStr.split("-").reverse().join("-")).getFullYear();
  const years = range.reduce( (acc, val) => [...acc, getYear(val)], []);
  return years[0] < years[1];
}
.as-console-wrapper { top: 0; max-height: 100% !important; }

答案 4 :(得分:1)

尝试此操作,将其作为输出的整数数组进行编辑

myValidator() {
  range = "7-01-2018 VS 5-01-2019";
  regEx = /\d{4}/g;
  return (range.match(regEx).map(x => parseInt(x,10));
}
Output :
[ 2018, 2019 ]