Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

1K
Vistas
día incorrecto en el selector de fecha de material angular

Cuando selecciono una fecha, veo la fecha correcta en el campo pero, cuando guardo, el selector de fecha envía el día anterior a la fecha que he seleccionado (desfase de 3 horas). Estoy usando el formulario reactivo angular y MatMomentDateModule para el selector de fecha.

el problema está relacionado con las zonas horarias, pero solo quiero guardar la misma fecha que el usuario ingresó a la base de datos.

Código reproducido aquí: https://stackblitz.com/edit/angular-material-moment-adapter-example-kdk9nk?file=app%2Fapp.module.ts

problema en stackblitz

problema relacionado con esto en githup:

https://github.com/angular/material2/issues/7167

Se agradece cualquier ayuda, y creo que muchos desarrolladores necesitan una solución para esto.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Hace dos días, en https://github.com/angular/material2/issues/7167 , Silthus publicó su solución que anula MomentJsDataAdapter. Lo probé y funcionó a las mil maravillas desde cualquier parte del globo.

Primero agregó un MomentUtcDateAdapter que extiende MomentDateAdapter

 import { Inject, Injectable, Optional } from '@angular/core'; import { MAT_DATE_LOCALE } from '@angular/material'; import { MomentDateAdapter } from '@angular/material-moment-adapter'; import { Moment } from 'moment'; import * as moment from 'moment'; @Injectable() export class MomentUtcDateAdapter extends MomentDateAdapter { constructor(@Optional() @Inject(MAT_DATE_LOCALE) dateLocale: string) { super(dateLocale); } createDate(year: number, month: number, date: number): Moment { // Moment.js will create an invalid date if any of the components are out of bounds, but we // explicitly check each case so we can throw more descriptive errors. if (month < 0 || month > 11) { throw Error(`Invalid month index "${month}". Month index has to be between 0 and 11.`); } if (date < 1) { throw Error(`Invalid date "${date}". Date has to be greater than 0.`); } let result = moment.utc({ year, month, date }).locale(this.locale); // If the result isn't valid, the date must have been out of bounds for this month. if (!result.isValid()) { throw Error(`Invalid date "${date}" for month with index "${month}".`); } return result; } }

Y luego, en el componente AppModule, debe hacer esto:

 providers: [ ... { provide: MAT_DATE_LOCALE, useValue: 'en-GB' }, { provide: MAT_DATE_FORMATS, useValue: MAT_MOMENT_DATE_FORMATS }, { provide: DateAdapter, useClass: MomentUtcDateAdapter }, ... ],
over 4 years ago · Santiago Trujillo Denunciar

0

Simplemente use la opción useUtc: true para MatMomentDateAdapter :

 import { MatMomentDateModule, MAT_MOMENT_DATE_ADAPTER_OPTIONS } from '@angular/material-moment-adapter'; @NgModule({ exports: [ MatMomentDateModule, // ... ], providers: [ { provide: MAT_MOMENT_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true } } ], }) export class CustomModule { }
over 4 years ago · Santiago Trujillo Denunciar

0

Tal vez sea útil para alguien. Es mi método de ejemplo en el que borro TimeZone OffSet de la fecha del componente

 addPriceListPeriod(priceListId: number, periodDateFrom: Date) { let UTCDate = Date.UTC(periodDateFrom.getFullYear(), periodDateFrom.getMonth(), periodDateFrom.getDate()) - periodDateFrom.getTimezoneOffset(); periodDateFrom = new Date(UTCDate); const tempObject = { priceListId, fromDate: periodDateFrom } return this.httpClient.post('PriceLists/addPriceListPeriod', tempObject); }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda