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

338
Visualizações
CYPRESS: ¿Cómo agregar un mes a mi fecha actual considerando meses como febrero (28 días) y meses que tienen 30 días?

Tengo esta prueba de ciprés donde estoy comprobando una fecha de facturación correcta. Nuestro sitio web tiene suscripciones mensuales y funciona de la siguiente manera: si inicia su suscripción el 31 de enero, su próxima fecha de facturación será automáticamente el 1 de marzo, ya que febrero tiene solo 28 días. Lo mismo si inicia su suscripción el 31 de marzo, su próxima fecha de facturación será el primero de mayo, ya que no hay 31 de abril y cambia automáticamente al primer día del mes siguiente. Comenzando en otras fechas normales como el 15, siempre será la misma fecha (15) del mes siguiente, etc.

Mi problema es que cuando pruebo esto con Cypress, siempre obtengo el último día del próximo mes. Por ejemplo, si pruebo que voy a comenzar mi suscripción el 31 de marzo, mi prueba tendrá el 30 de abril como resultado esperado, lo cual no es correcto ya que quiero que el resultado esperado de mi prueba sea el 1 de mayo.

Estoy usando esta función pero parece que no puedo hacer que funcione correctamente ya que hay muchas diferencias en los meses.

 export const getBillingDate = (todayDate: string, months: number) => { const date1 = new Date(todayDate) const date2 = new Date(todayDate) date1.setDate(1) const daysInNextMonth = getDaysInMonth(addMonths(date1, months)) date2.setDate(Math.min(date2.getDate(), daysInNextMonth)) return format(addMonths(date2, months), 'MMMM do, yyyy') }

Realmente agradecería la ayuda de alguien con esto, ya que soy nuevo en Cypress y en las pruebas en general. (Lo siento, el inglés no es mi primer idioma)

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

0

Tanto dayjs como javascript new Date() no pueden agregar todas las fechas exactamente como lo desea.

Pero puede usar dayjs().daysInMonth() para obtener resultados exactamente según su descripción,

 const getBilling = (startDate) => { const [year, month, day] = startDate.split('/') const sd = dayjs(startDate) const firstOfNextMonth = sd.month(sd.month() + 1).date(1) const daysInNextMonth = dayjs(firstOfNextMonth).daysInMonth() let end; if (daysInNextMonth < day) { end = `${year}/${+month+2}/${1}` // always bump to 1st day of month + 2 } else { end = `${year}/${+month+1}/${day}` } return dayjs(end, 'YYYY/MM/DD').format('YYYY/MM/DD') } it('gets billing date, accounting for short months', () => { //Jan expect(getBilling('2022/01/15')).to.eq('2022/02/15') expect(getBilling('2022/01/31')).to.eq('2022/03/01') //Feb expect(getBilling('2022/02/15')).to.eq('2022/03/15') expect(getBilling('2022/02/28')).to.eq('2022/03/28') //Mar expect(getBilling('2022/03/15')).to.eq('2022/04/15') expect(getBilling('2022/03/31')).to.eq('2022/05/01') })

ingrese la descripción de la imagen aquí

about 4 years ago · Juan Pablo Isaza Relatório

0

Sus requisitos son un poco inusuales. Por lo general, cuando se agrega un mes y se desborda, el requisito es devolver el último día del mes, no el primero del mes siguiente. Pero no es difícil, solo obtenga la fecha de inicio (día en mes), agregue un mes y, si la fecha resultante no es la misma, configúrela en el 1, por ejemplo:

 function addBillingMonth(date = new Date()) { let d = new Date(+date); let dayNum = d.getDate(); d.setMonth(d.getMonth() + 1); if (dayNum !== d.getDate()) { d.setDate(1); } return d; } // Examples [ new Date(2021,11,31), // 31 Dec new Date(2022, 0,15), // 15 Jan new Date(2022, 0,31), // 31 Jan new Date(2022, 2,31), // 31 Mar ].forEach(d => console.log(d.toDateString() + ' next bill: ' + addBillingMonth(d).toDateString()) );

about 4 years ago · Juan Pablo Isaza Relatório

0

Day.js ya existe para hacer cálculos de fechas.

Puede usar su .add() para agregar 30 días a una fecha dayjs().add(30, 'day') .

También puede formatear las fechas con .format() para formatearlas de la manera que desee dayjs('2019-01-25').format('DD/MM/YYYY') // '25/01/2019'

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