Estoy buscando si hay una mejor manera (que no sea la solución a continuación) de comparar fechas para todos los usuarios (en diferentes países) en la zona horaria EST. Necesito sus aportes/ayuda.
Básicamente, tengo que mostrar tres interfaces de usuario basadas en tres fechas diferentes. Hasta junio, la primera interfaz de usuario debe mostrarse, la segunda interfaz de usuario de junio a julio y, a partir del 3 de julio, la interfaz de usuario debe mostrarse. Estas fechas al comparar deben estar en la zona horaria EST.
const JulyDate = new Date("2022-07-01T00:00:00.000-05:00"); const JuneDate = new Date("2022-06-01T00:00:00.000-05:00"); if(new Date().getTime() < JuneDate.getTime()){ renderUIPriorJune= true; renderUIJune= false; renderUIJuly= false; } else if(new Date().getTime() >= JuneDate.getTime() && new Date().getTime() < JulyDate.getTime()){ renderUIPriorJune= false; renderUIJune= true; renderUIJuly= false; } else if(new Date().getTime() >= JulyDate.getTime()){ renderUIPriorJune= false; renderUIJune= false; renderUIJuly= true; }He definido las fechas de junio y julio en la zona horaria EST, es decir, -5 horas como compensación y luego la fecha actual se compara con esas fechas.
¿Podría decirme si esta es la forma correcta de comparar o si hay una mejor manera de hacerlo? Soy bastante nuevo en Java script.
Gracias de antemano.
El método getTime() siempre devuelve la cantidad de milisegundos en la zona horaria UTC, y esto es exactamente lo que necesita para comparar 2 valores de marca de tiempo porque la zona horaria UTC no tiene períodos de ahorro de luz diurna.
Su lógica está bien, pero un método más simple es simplemente obtener el mes actual en la zona horaria requerida. Por "EST" supongo que te refieres a la hora estándar del este de EE. UU., que corresponde a la zona horaria de la IANA "EE. UU./Este".
Entonces, todo lo que necesita hacer es averiguar en qué mes cae la fecha, lo que se puede hacer usando toLocaleString con las opciones adecuadas, por ejemplo
function getEasternMonth(date = new Date()) { return date.toLocaleString('en',{month: 'numeric', timeZone:'US/Eastern'}); } console.log('Current month in US EST: ' + getEasternMonth()); let s = '2022-06-01T00:00:00Z'; console.log(s + ' is EST month ' + getEasternMonth(new Date(s)));Ahora su lógica se simplifica enormemente a:
let month = getEasternMonth(); if (month < 6) { // do stuff for pre–June } else if (month == 6) { // do stuff for June } else { // do stuff for post June }Tenga en cuenta que todo lo anterior está utilizando el número de mes calendario (es decir, 6 = junio).
Para cualquier manipulación o comparación de fechas, debe usar una biblioteca. Una buena es dayjs .
Para saber si una fecha es anterior al 1 de junio, no tiene que preocuparse por la hora, solo compare las fechas. Dayjs tiene un método isBefore que toma la granularidad como uno de los argumentos. Si establece la granularidad en day , comparará año, mes y día, pero no hora, minuto, etc.
const now = dayjs(); const isBeforeJune = now.isBefore('2022-06-01', 'month')