Estoy desarrollando una aplicación usando Javascript. Dentro del código, recibo el Datetime . Esta fecha y hora puede tener el desplazamiento de la zona horaria o no. Me gustaría verificar si el desplazamiento de la zona horaria está presente o no, en función de lo cual necesito tomar algunas decisiones.
El siguiente es el tipo de datos que entrarán en mi función Javascript:
const dateWithoutOffset = "2022-03-01T16:23:19" const dateWithOffset = "2022-03-01T16:23:19+01:00" //Perform something to check for offset if(dateWithOffset.contains(offset)){ console.log("OFFSET is PRESENT") } //Perform something to check offset is not present if(dateWithoutOffset.contains(offset)){ console.log("OFFSET IS NOT PRESENT") }Sé que puedo verificar la longitud, pero siento que no es la forma correcta, así que pensé en preguntar aquí y encontrar la forma correcta de encontrar la compensación.
Probé muchos métodos y respuestas presentes en Stackoverflow, pero nada parece darme la respuesta correcta, así que publiqué aquí para obtener una respuesta correcta.
Puede usar expresiones regulares para analizar el desplazamiento de estas cadenas de fecha ISO.
La creación de algunas funciones convenientes como hasOffset() y getUTCOffsetMinutes() debería hacer que el problema sea más fácil de resolver.
Si la fecha tiene un desplazamiento, puede proceder a analizarla (como se muestra a continuación) o hacer otra cosa, como mostrarla de manera diferente.
const isoDatePattern = /(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2})(\.\d+)?([+-]\d{2}:?\d{2}|Z)$/ function getOffsetStr(input) { const groups = input.match(isoDatePattern); return groups ? groups[4]: null; } function hasOffset(input) { return (!!getOffsetStr(input)); } function getUTCOffsetMinutes(input) { const offset = getOffsetStr(input); return offset ? parseUTCOffset(offset): null; } function parseUTCOffset(offsetStr) { if (offsetStr.toUpperCase() === 'Z') { return 0; } const sign = offsetStr.startsWith('-') ? -1: 1; const hour = +offsetStr.slice(1,3); const min = +offsetStr.slice(-2); return sign * hour * 60 + min; } const testInputs = [ "2010-11-06T02:19:00.250", "2022-03-01T16:23:19", "2025-04-20T17:02:03.401+0200", "2022-03-01T16:23:19+01:00", "2022-03-01T16:23:19Z", "2022-03-01T16:23:19-0500", "2022-03-01T16:23:19+12:00" ] console.log('Input'.padEnd(28, ' '), 'Has Offset ' ,'UTC Offset (minutes)') testInputs.forEach(input => { console.log(input.padEnd(28, ' '), hasOffset(input), '\t', getUTCOffsetMinutes(input)); }) .as-console-wrapper { max-height: 100% !important; }