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行函数,您可以将其转换为常规函数。先生,我希望它们是一个整数。正如我在问题中提到的。我稍后会比较它们。比如,哪个更大,多少。还涉及一些算术。它现在应该可以工作了,输出将是整数数组。如果您不遵循箭头函数,您可以将其转换为我不喜欢普通的。