es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo convertir el formato de fecha y hora de Luxon en un formato de texto o números?

Estoy utilizando el siguiente código para configurar un reloj Luxon para mi proyecto:

import { DateTime } from 'luxon';
import React, { useEffect, useState } from 'react';

interface IProps {
  timezone: string;
  format: string;
  calendar?: string;
  daysOffset?: number;
}

const LiveDateTime: React.FC<iprops> = ({
  timezone,
  daysOffset,
  format,
  calendar,
}) => {
  const [timeLive, setTimeLive] = useState<datetime>(DateTime.local());

  useEffect(() => {
    const interval = setInterval(() => {
      setTimeLive(
        DateTime.local()
          .setZone(timezone)
          .reconfigure({ outputCalendar: calendar })
          .plus({ days: daysOffset })
      );
    }, 1000);

    return () => clearInterval(interval);
  }, [timezone]);

  return <span>{timeLive?.toFormat(format)}</span>;
}; 
export default LiveDateTime;

Ahora, estoy usando este componente en otro lugar para definir el número del mes de la fecha actual:

const month = <livedatetime timezone="{place?.timezone}" format="M"></livedatetime>; // Esto devuelve '12' como un número en la interfaz de usuario (para diciembre)
console.log(month)
getData(month); // Esta función debería devolver algunos datos basados en el mes dado.
// En cambio, obtengo un error en esta línea que dice: 'El argumento de tipo 'Element' no es asignable al parámetro de tipo 'number'.

Cuando imprimo esto en la consola, obtengo un objeto react.element completo. Necesito poder usar ’12’ como un número (para diciembre) en getData() para la variable month. ¿Cómo puedo convertir este objeto en un tipo ‘number’ o ‘string’ si es necesario?
PD: Intenté usar parseInt(), pero no funciona.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para extraer el valor numérico del objeto del elemento React devuelto por LiveDateTime, puede utilizar la propiedad .props para acceder a la propiedad children, que contendría la cadena de fecha formateada, y luego utilizar parseInt() para convertirla en un número. Así es como puede modificar el código para extraer el número del mes:

    const monthElement = <livedatetime timezone="{place?.timezone}" format="M"></livedatetime>;
    const month = parseInt(monthElement.props.children);
    console.log(month);
    getData(month);
    

    Esto debería mostrar el número del mes como un tipo numérico que se puede pasar como argumento a getData(). Asegúrese de manejar casos de error donde la propiedad children no sea una cadena de número válida.

Comments are closed.