Quiero formatear mi fecha con la función toIsoString pero la función devuelve -1 día ¿cómo solucionarlo? el formato event.value es el martes Tue Apr 19 2022 00:00:00 GMT+0400 (Armenia Standard Time)
console.log(new Date(event.value).toISOString().slice(0,10)) en la consola, obtengo este 2022-04-18 cómo pueden ver el resultado fue -1 día
startDateChange(event: any): void{ this.firstDayOfMonth = event; console.log(new Date(event.value).toISOString().slice(0, 10)); }Esto se debe a la configuración de su zona horaria. El toISOString siempre devuelve +0000 mientras trabaja con +0400 en su zona horaria. Esto esencialmente se retira 4 horas dando como resultado el día anterior, 20:00 horas.
Puede intentar solucionar esto configurando el desplazamiento de la zona horaria en 0 agregando una Z a la fecha como se muestra en el segundo ejemplo.
El tercer ejemplo es una forma segura de hacerlo, pero debe anteponer el 0 si lo necesita.
Otra alternativa sería usar una biblioteca de fechas como Moment.js, aunque moment está en desuso (no sé con certeza cuál sería la mejor alternativa, eso depende de usted).
// Your example (this might work for some people that are in the +0000 timezone) console.log(new Date('2021-03-03T00:00:00').toISOString().slice(0,10)); // Second example console.log(new Date('2021-03-03T00:00:00z').toISOString().slice(0,10)); // Third example const date = new Date('2021-03-03T00:00:00'); const year = date.getFullYear(); const month = date.getMonth() + 1; const day = date.getDate(); console.log(`${year}-${month}-${day}`);Puede usar https://day.js.org/
Código:
const dateString = 'Tue Apr 19 2022 00:00:00 GMT+0400 (Armenia Standard Time)' const date1 = dayjs(dateString).format('YYYY-MM-DD') console.log(date1) const date2 = dayjs(dateString).format('YYYY-M-D') console.log(date2) <script src="https://cdnjs.cloudflare.com/ajax/libs/dayjs/1.11.0/dayjs.min.js"></script>