Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

199
Visualizações
How to filter ISO DateTime objects outside the range of specific time interval

I have a list of objects with startTime and endTime properties in ISO format for a project I am currently working on. Here is a sample:

list = [
 {
   startTime: '2022-06-26T10:00:00.000Z',
   endTime: '2022-06-26T10:30:00.000Z'
 },
 {
   startTime: '2022-06-26T10:35:00.000Z',
   endTime: '2022-06-26T11:00:00.000Z'
 },
 {
   startTime: '2022-06-26T11:45:00.000Z',
   endTime: '2022-06-26T12:15:00.000Z'
 },
 {
   startTime: '2022-06-26T12:10:00.000Z',
   endTime: '2022-06-26T12:25:00.000Z'
 },
 {
   startTime: '2022-06-26T12:20:00.000Z',
   endTime: '2022-06-26T12:45:00.000Z'
 },
 {
   startTime: '2022-06-26T12:40:00.000Z',
   endTime: '2022-06-26T13:00:00.000Z'
 }
]

And I have an object assignment which has two properties like the objects of the list array above.

const assignment = {
   startTime: '2022-06-26T12:00:00.000Z',
   endTime: '2022-06-26T12:30:00.000Z'
}

My task is to filter the objects from the list array which do not fall into the interval/overlap with the assignment. For example, I want to include the following in my result array because they do not overlap/inside the interval of the assignment:

const result = [
  {
   startTime: '2022-06-26T10:00:00.000Z',
   endTime: '2022-06-26T10:30:00.000Z'
  },
 {
   startTime: '2022-06-26T10:35:00.000Z',
   endTime: '2022-06-26T11:00:00.000Z'
 },
 {
   startTime: '2022-06-26T12:40:00.000Z',
   endTime: '2022-06-26T13:00:00.000Z'
 }
]

But I want to exclude the following from my result array because they overlap/inside the interval of the assignment object.

[
  {
   startTime: '2022-06-26T11:45:00.000Z',
   endTime: '2022-06-26T12:15:00.000Z'
 },
 {
   startTime: '2022-06-26T12:10:00.000Z',
   endTime: '2022-06-26T12:25:00.000Z'
 },
 {
   startTime: '2022-06-26T12:20:00.000Z',
   endTime: '2022-06-26T12:45:00.000Z'
 },
]

This is my idea so far: So, there are basically 5 scenarios.

Scenario 1: startTime and endTime of a list object are before the startTime of assignment
Scenario 2: startTime of a list object is before the startTime of the assignment but endTime is after startTime and before endTime of the assignment
Scenario 3: startTime and endTime of a list object falls entirely into the interval of the startTime and endTime of the assignment object
Scenario 4: startTime of a list object is after the startTime and before the endTime of assignment but endTime(list object) is after the endTime of the assignment  
Scenario 5: Both startTime and endTime of the list object are after the endTime of the assignment

Other than writing a lot of if-else conditions, what is the best approach to filter the list of objects? I am using Javascript with luxon library. Any help would be greatly appreciated.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

You can check that the intervals don't overlap by checking that the endTime in list is before the startTime in assignment, or that the startTime in list is after the endTime in assignment:

list = [
 { startTime: '2022-06-26T10:00:00.000Z', endTime: '2022-06-26T10:30:00.000Z' },
 { startTime: '2022-06-26T10:35:00.000Z', endTime: '2022-06-26T11:00:00.000Z' },
 { startTime: '2022-06-26T11:45:00.000Z', endTime: '2022-06-26T12:15:00.000Z' },
 { startTime: '2022-06-26T12:10:00.000Z', endTime: '2022-06-26T12:25:00.000Z' },
 { startTime: '2022-06-26T12:20:00.000Z', endTime: '2022-06-26T12:45:00.000Z' },
 { startTime: '2022-06-26T12:40:00.000Z', endTime: '2022-06-26T13:00:00.000Z' }
]

const assignment = { startTime: '2022-06-26T12:00:00.000Z', endTime: '2022-06-26T12:30:00.000Z' }

const aDates = { 
  startTime: new Date(assignment.startTime),
  endTime: new Date(assignment.endTime)
}

const result = list.filter(({ startTime, endTime }) => 
  new Date(startTime) > aDates.endTime ||
  new Date(endTime) < aDates.startTime
)

console.log(result)
.as-console-wrapper { max-height:100% !important; top: 0 }

Note I've converted the dates in assignment to Date outside the loop to save the conversion happening multiple times.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda