Javascript 检查日期范围

Javascript 检查日期范围,javascript,date,momentjs,Javascript,Date,Momentjs,我目前正在开发一个系统,它有基于日期范围的规则 用户可以提交表单,我需要检查最新输入是否符合3个日期范围中的1个。基本上,这两个日期必须在以下3条规则中的1条之内 01/01-30/04 01/05 - 30/09 10月1日至12月31日 我需要计算开始日期的月份和结束日期的月份,如果结束日期超出范围,则记录它 因此,基本上,如果用户提交2017年1月1日作为开始日期,2017年2月10日作为结束日期,这将是一个有效的输入,但如果用户输入2017年1月1日作为开始日期,2017年6月1日作为结

我目前正在开发一个系统,它有基于日期范围的规则

用户可以提交表单,我需要检查最新输入是否符合3个日期范围中的1个。基本上,这两个日期必须在以下3条规则中的1条之内

01/01-30/04 01/05 - 30/09 10月1日至12月31日

我需要计算开始日期的月份和结束日期的月份,如果结束日期超出范围,则记录它

因此,基本上,如果用户提交2017年1月1日作为开始日期,2017年2月10日作为结束日期,这将是一个有效的输入,但如果用户输入2017年1月1日作为开始日期,2017年6月1日作为结束日期,则该输入将无效,因为该日期跨越多个日期范围


可以用javascript检查这种情况吗?我经历了各种场景,但是数组中的范围和对数组值的检查,但我总是把自己弄得一团糟。

你可以简单地用getTime()检查日期是否在范围内

const isDateInRage=(开始日期、结束日期)=>(日期检查)=>{
return dateToCheck>=startDate&&dateToCheck试试这个

// parse string 'XX/XX/XXXX' to create date object
function parseDate(str) {
    var mdy = str.split('/');
    return new Date(mdy[2], mdy[0]-1, mdy[1]);
}

function daysBetween(date1, date2) {
    return Math.round((parseDate(date1)-parseDate(date2)) / (1000*60*60*24));
}

if(daysBetween('01/01/2017', '01/06/2017') > 1) {
    // Your code here
}

考虑使用一个函数来测试每个范围的开始日期和结束日期,并在符合其中一个范围时立即返回true。您需要正确解析字符串,还需要使用开始日期或结束日期后的年份,并将其应用于范围

下面的函数使用开始日期,如果开始日期和结束日期符合某个范围,则返回true,否则返回false。如果提供的开始日期或结束日期无效,则抛出错误

//将yyyy-mm-dd格式的日期解析为本地日期
函数parseYMD(s){
var b=s.split(/\D/);
var d=新日期(b[0],--b[1],b[2]);
返回d&d.getMonth()==b[1]?d:新日期(NaN);
}
//检查开始和结束日期是否在有效范围内
var checkInRange=(函数(){
//定制解析器
函数解析部分(p,y){
p=p.split(/\D/);
返回新日期(y,p[1]-1,p[0]);
}
//有效范围为d/m,年份从开始日期算起
var validRanges=['01/01-30/04'、'01/05-30/09'、'01/10-31/12'];
返回函数(开始日期、结束日期){
var dStart=parseYMD(起始日期);
var dEnd=parseYMD(endDate);
//如果输入日期无效,则抛出错误
如果(伊斯南(dStart)|伊斯南(dEnd)){
抛出新错误('开始或结束日期无效')
}
var year=dStart.getFullYear();
//如果范围在有效范围内,则返回true
返回validRanges.some(函数(范围){
var r=range.split('-').map(函数{return parsePart(s,year)});

return dStart>=r[0]&&dEnd您已经添加了momentjs标志,因此可以查看他们的文档,这使一切变得简单!只需在开始和结束日期中创建两个时刻(例如,
var startMoment=moment(start_date)
),然后您可以通过调用
get('month')来获取他们的月份在您刚刚创建的那一刻,。由于您的日期范围跨越了一年,请考虑编写一个以日期为输入的函数,并返回0, 1或2,取决于日期的范围是多少。然后,您的任务来检查函数是否与起始日期和结束日期相同。(在某些情况下,您可能还需要检查开始日期。您还需要检查两个用户日期是否具有相同的年份。请注意,“新日期('2016-01-01'))将日期视为UTC,因此对于格林威治以西的用户,它将显示为2015-12-31。此外,比较运算符将日期转换为数字,因此不需要getTime。是的,但由于我们只是使用相同的字符串格式比较日期,所以这不会是一个问题。对于更复杂的逻辑,我首先建议使用矩.js。基于在这个问题上,似乎>应该>=应用反馈虽然这是一个好方法,但您应该解释代码如何修复OP的问题。此外,OP只想知道某个特定日期是否在其他日期对的范围内,而不是两个日期之间的天数。