Javascript 如何从包含日期范围的字符串中提取年份[Typescript/Angular]

Javascript 如何从包含日期范围的字符串中提取年份[Typescript/Angular],javascript,typescript,Javascript,Typescript,我是打字的初学者。我有一个作为字符串接收的日期范围 var range="7-01-2018 VS 5-01-2019"; 这是硬编码现在只是为了解释你。但它也只有在以后才会以这种字符串形式出现。我必须提取2018年并将其存储在某个变量中,比如说startYear,还必须提取2019年并将其存储在endYear变量中。这样以后我可以比较它们并应用验证 我尝试使用: 子字符串(开始、结束) 我的代码工作正常,但问题是当选择两位数的日期时,字符串的长度会改变。例如: 2018年1月7日VS 201

我是打字的初学者。我有一个作为字符串接收的日期范围

var range="7-01-2018 VS 5-01-2019";
这是硬编码现在只是为了解释你。但它也只有在以后才会以这种字符串形式出现。我必须提取2018年并将其存储在某个变量中,比如说
startYear
,还必须提取2019年并将其存储在
endYear
变量中。这样以后我可以比较它们并应用验证

我尝试使用:

  • 子字符串(开始、结束)
  • 我的代码工作正常,但问题是当选择两位数的日期时,字符串的长度会改变。例如:

  • 2018年1月7日VS 2019年1月25日
  • 2018年1月17日VS 2019年1月5日
  • 2018年1月27日VS 2019年1月25日
  • 在这些情况下,
    start
    end
    将具有不同的含义。我现在该怎么办。请帮帮我

    我的方法是:

    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");
      }
    }
    
    myValidator(){
    range=“7-01-2018 VS 5-01-2019”;
    startYear=范围子串(5,8);
    endYear=范围子串(18,21);
    如果(年终
    • 使用
      String.prototype.match
    • 使用
      String.prototype.match

    使用
    拆分
    日期
    减少

    console.log(“7-01-2018 VS 25-01-2019:”,检查范围(“7-01-2018 VS 25-01-2019”);
    控制台日志(“2019年1月7日VS 2018年1月25日:”,检查范围(“2019年1月7日VS 2018年1月25日”);
    功能检查范围(输入范围){
    常数范围=输入范围分割(“VS”);
    const getYear=dateStr=>
    新日期(dateStr.split(“-”).reverse().join(“-”).getFullYear();
    const years=范围。reduce((acc,val)=>[…acc,getYear(val)],[]);
    回归年[0]<回归年[1];
    }

    作为控制台包装{top:0;最大高度:100%!重要;}
    使用
    拆分
    日期
    减少

    console.log(“7-01-2018 VS 25-01-2019:”,检查范围(“7-01-2018 VS 25-01-2019”);
    控制台日志(“2019年1月7日VS 2018年1月25日:”,检查范围(“2019年1月7日VS 2018年1月25日”);
    功能检查范围(输入范围){
    常数范围=输入范围分割(“VS”);
    const getYear=dateStr=>
    新日期(dateStr.split(“-”).reverse().join(“-”).getFullYear();
    const years=范围。reduce((acc,val)=>[…acc,getYear(val)],[]);
    回归年[0]<回归年[1];
    }

    。作为控制台包装{top:0;最大高度:100%!important;}
    您是对的,拆分将很好

    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");
          }
        }
    
    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])
    
    如果(年终你是对的,拆分就好了

    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");
          }
        }
    
    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])
    如果(年终全部在一行中

    const[,startYear,endYear]=range.match(/.*-(\d{4})VS.*-(\d{4})$/);
    
    全部在一行中

    const[,startYear,endYear]=range.match(/.*-(\d{4})VS.*-(\d{4})$/);
    
    试试这个,为整数数组编辑输出

    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 ]
    

    试试这个,为作为输出的整数数组编辑

    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 ]
    


    使用
    split
    将字符串分成两部分(如果确认,则按
    VS
    拆分)。然后解析日期(
    split
    在本例中按
    -
    拆分即可)。这是一个很好的方法。好的。我将实现此方法,并在需要时返回给您。:-)如果您的程序有大量的日期操作,我建议您使用矩.js()@CHANist.对不起,我不允许在组织之外使用任何东西。否则我会直接使用Priming。我必须从头开始创建。@Narro.输出:
    [数组(5)[“1”、“01”、“2019 VS 3”、“01”、“2019”]
    使用
    拆分
    将字符串拆分为两部分(如果确认,则按
    VS
    拆分)。然后解析日期(
    split
    by
    -
    在本例中是可以的)。这是一个很好的方法。好的。我将实现此方法,并在需要时返回给您。:-)如果您的程序有大量的日期操作,我建议您使用矩.js()@CHANist。对不起。我不允许在组织之外使用任何东西。否则我会直接使用Priming。我必须从头开始创建。@Narro。输出:
    [Array(5)[“1”、“01”、“2019 VS 3”、“01”、“2019”]
    这里的
    x
    是什么意思。你是说
    范围
    ?对吗?正在安慰你的输入,所以键入:)这里的
    x
    是什么。你的意思是
    range
    ?对吗?是在安慰你的输入,所以输入:)这个问题是关于只提取年份,而不是整个日期。正则表达式的良好使用虽然我刚刚意识到你的正则表达式不正确,它应该是
    \d{0,2}-\d{0,2}-(\d{0,4})
    。但是,由于您只提取年份,因此在这种情况下仍然有效。这个问题是关于仅提取年份而不是整个日期。正则表达式的良好使用虽然我刚刚意识到您的正则表达式不正确,但它应该是
    \d{0,2}-\d{0,2}-(\d{0,4})
    。但是,由于您只提取年份,因此在这种情况下它仍然有效。先生,我希望它们是整数。正如我在问题中提到的。我稍后还要比较它们。例如,哪个更大,多少。还涉及一些算术。它现在应该可以工作,输出将是整数数组。如果您不遵循ar行函数,您可以将其转换为常规函数。先生,我希望它们是一个整数。正如我在问题中提到的。我稍后会比较它们。比如,哪个更大,多少。还涉及一些算术。它现在应该可以工作了,输出将是整数数组。如果您不遵循箭头函数,您可以将其转换为我不喜欢普通的。