Controla el uso de tu clave antes de alcanzar un límite
Vigilar las cabeceras de cuota sobre la marcha te indica cuándo te acercas a un límite, mucho antes de que se rechace realmente una solicitud.
"Abrimos hasta las 6 de la tarde" solo es útil si el visitante que lo lee sabe a qué 6 de la tarde te refieres. Un visitante en una zona horaria distinta de la de tu negocio necesita que esa comparación se haga en su propia hora local, no en la tuya.
Una sola consulta de IP devuelve directamente un campo timezone, lo que te da lo que necesitas sin una llamada aparte.
GET /v1/ip?ip=203.0.113.44{
"status": "ok",
"ip": "203.0.113.44",
"version": 4,
"found": true,
"country": "Japan",
"country_code": "JP",
"region": "Tokyo",
"city": "Tokyo",
"postcode": "100-0001",
"lat": 35.6762,
"lon": 139.6503,
"timezone": "Asia/Tokyo",
"asn": 2345,
"org": "Example Telecom"
}Convierte tu propio horario comercial, guardado según la zona horaria de tu negocio, a la zona del visitante usando el identificador de zona horaria que acabas de obtener, y luego compáralo con la hora local actual del visitante para decidir si mostrar "abierto ahora" o "cerrado", junto con la hora local de referencia que estás mostrando.
Un negocio con locales en distintas ciudades debería consultar el horario publicado de cada local según su propia zona guardada y luego comparar cada uno por separado con la zona del visitante, en lugar de suponer que un único horario se aplica en todas partes. Esto importa sobre todo cuando un visitante compara dos locales en la misma página, ya que uno podría aparecer abierto y el otro cerrado exactamente en el mismo momento si están en zonas distintas o aplican el horario de verano de forma diferente.
En lugar de convertir en silencio y esperar que el visitante lo entienda, muestra ambos datos con claridad, algo como "Cerrado ahora. Abre a las 9 de la mañana, tu hora (Asia/Tokyo)." Ser explícito evita confusiones cuando un negocio opera a ambos lados de una frontera que cambia con el horario de verano en un lado pero no en el otro.
No calcules la comparación de abierto o cerrado una sola vez para guardar en caché ese resultado booleano durante el resto de la sesión del visitante. Una comparación hecha a las 5:55 p. m. dirá "abierto" y seguirá siendo errónea a las 6:05 p. m. si el estado de apertura se guarda en caché en lugar de recalcularse. Guarda en caché el identificador de zona horaria del visitante, ya que es realmente estable durante una sesión, pero vuelve a calcular la comparación real de abierto o cerrado en cada renderizado.
Algunas regiones mantienen un desfase fijo todo el año mientras una región vecina cambia dos veces al año, lo que significa que la diferencia entre dos zonas no es constante a lo largo del calendario. Si tu lógica de comparación fija un desfase en horas en el código en lugar de partir del identificador de zona horaria y dejar que tu biblioteca de fechas haga la conversión, se desincronizará justo en las semanas cercanas a un cambio de horario de verano.
El identificador de zona horaria del visitante es estable durante una sesión y vale la pena guardarlo en caché. Si el negocio está abierto o no cambia a lo largo del día, así que vuelve a calcular esa comparación al renderizar usando la zona en caché, en lugar de guardar en caché el propio estado de abierto o cerrado.
Si necesitas saber cuál era, o cuál será, el desfase en un momento concreto y no ahora mismo, por ejemplo para confirmar a qué hora se hizo realmente en la zona del cliente un pedido realizado ayer, /v1/timezone acepta un parámetro opcional time como marca de tiempo Unix precisamente para ese tipo de comprobación histórica o futura.
Una consulta de IP por cada nueva sesión de visitante basta para esta función. Es una sola solicitud guardada en caché durante la visita, lo que mantiene una tienda online con mucho tráfico holgadamente dentro de las 2.500 solicitudes gratuitas al día incluidas con cada clave.
Mostrar bien "abierto ahora" a una audiencia global es cuestión de una consulta y una comparación horaria sencilla, no de una función complicada. La documentación de consulta IPv4 muestra la forma completa de la respuesta.