Estoy obteniendo data.value que es una hora en el formato: hh:mm a - por ejemplo, 12:30 am .
También sé:
userTimeZone )venueTimeZone ) Necesito convertir la hora seleccionada por el usuario ( data.value ) a la fecha correcta en la venueTimeZone del lugar. Por ejemplo, si el usuario está en Americas/New York y seleccionó la 1:30 p. m. del 20/05/2022, y el lugar está en Americas/Los Angeles , el valor que me interesa obtener es 20/05/2022 10:30AM .
Este es mi intento, sin embargo, la zona horaria en sí no cambia; creo que esto se debe a que cuando creo el userDateTime con el moment , no especifico un desplazamiento de tiempo, pero no estoy seguro de cómo obtener el desplazamiento de userTimeZone , mientras que Contabilización del horario de verano.
const userTimeZone = _.get( Intl.DateTimeFormat().resolvedOptions(), ['timeZone'] ); const venueDateStr = new Date().toLocaleString('en-US', { timeZone: venueTimeZone, }); const Date = new Date(restaurantDateStr); const venueYear = venueDate.getFullYear(); const venueMonth = `0${venueDate.getMonth() + 1}`.slice(-2); const venueDateOfMonth = `0${venueDate.getDate()}`.slice(-2); const userDateTime = createDateAsUTC( moment( `${venueDateOfMonth}/${venueMonth}/${venueYear} ${data.value}`, 'DD/MM/YYYY hh:mm a' ).toDate() ).toLocaleString('en-US', { timeZone: venueTimeZone });EDITAR: no tengo el desplazamiento de la ciudad, tengo el nombre de la zona horaria, por lo tanto, no puedo usar ninguna respuesta sugerida que se base en el desplazamiento de la ciudad.
Considere usar Luxon , el sucesor de Moment. (Consulte el estado del proyecto de Moment ).
// Parse your input string using the user's local time zone // (this assumes the current local date) const local = luxon.DateTime.fromFormat('1:30 pm', 'h:mm a'); // Convert to the desired time zone const converted = local.setZone('America/Los_Angeles'); // Format the output as desired const formatted = converted.toFormat('dd/MM/yyyy h:mm a').toLowerCase(); console.log(formatted); <script src="https://cdnjs.cloudflare.com/ajax/libs/luxon/2.4.0/luxon.min.js"></script>También puede hacer esto sin una biblioteca, sin embargo, es posible que no todos los navegadores analicen la cadena de entrada, y su formato de salida también depende del navegador.
// Get the current local date as a string const date = new Date().toLocaleDateString(); // Parse the date and time in the local time zone // Warning: This is non-standard and may fail in some environments const dt = new Date(date + ' 1:30 pm'); // Format the output, converting to the desired time zone const result = dt.toLocaleString(undefined, { timeZone: 'America/Los_Angeles' }); console.log(result);Hay, por supuesto, formas manuales de analizar y dar formato a las fechas (usando expresiones regulares, etc.), pero dejaré que lo completen usted u otra persona.