tengo lo siguiente:
const input: string = '2021-11-2T10:20:00+01:00'; const date: string = moment( input ).format('YYYY-MM-DD'); const time: string = moment( input ).format('HH:mm');¿Puede alguien decirme por qué me devuelven 'fecha no válida' tanto para 'fecha' como para 'hora'?
Por lo que entiendo, la cadena de 'entrada' es un formato de fecha estándar (el momento me dio este formato).
Tenga cuidado con los ceros iniciales (requeridos por el formato RFC2822/ISO ). Puede validar la cadena de fecha usando el constructor de Date :
new Date('2021-11-2T10:20:00+01:00') // Invalid Date (because of date = '2' instead of '02') new Date('2021-11-02T10:20:00+01:00') // Tue Nov 02 2021 11:20:00 GMT+020 (works fine!) Lo mismo para instancias de moment :
moment('2021-11-2T10:20:00+01:00') // invalid (error or deprecation warning depends on 'moment' version) moment('2021-11-02T10:20:00+01:00') // validLo que está utilizando se conoce como timestamptz. Hay un error. Entonces timestamptz tiene el siguiente formato:
YYYY-MM-DDThh:mm:ssZZTe falta un "0" en tu día:
2021-11- 0 2T10:20:00+01:00
Entonces solo puedes hacer:
const fullDate = moment('2021-11-02T10:20:00+01:00') const date = moment( input ).format('YYYY-MM-DD') const time = moment( input ).format('HH:mm') Observe que eliminé : string . No es necesario definir la escritura por cierto. Se puede inferir.
La cadena de entrada que estaba usando de alguna manera no era válida. Cuando utilicé "2021-11-02T14:43:59+00:00", funciona bien.