Guías

Crea un selector de zona horaria que use por defecto la zona del visitante

Recorrer una lista de nombres de zonas horarias para encontrar la tuya es una pequeña molestia que un valor predeterminado sensato elimina para casi todo el mundo.

Detectar la zona

El endpoint /v1/ip devuelve directamente un campo timezone, así que una sola llamada te da a la vez la ubicación y el identificador de zona horaria, sin una llamada aparte al endpoint de zona horaria.

GET /v1/ip?ip=203.0.113.88
{
  "status": "ok",
  "ip": "203.0.113.88",
  "version": 4,
  "found": true,
  "country": "Australia",
  "country_code": "AU",
  "region": "New South Wales",
  "city": "Sydney",
  "postcode": "2000",
  "lat": -33.8688,
  "lon": 151.2093,
  "timezone": "Australia/Sydney",
  "asn": 7890,
  "org": "Example Networks"
}

Preseleccionar el selector

Establece el valor timezone de esta respuesta como la opción seleccionada en tu formulario de ajustes cuando se renderiza por primera vez, en el servidor, antes de que la página llegue al visitante. Esto funciona igual tanto si el selector es un desplegable de identificadores de zona estándar como si es una lista con búsqueda, ya que el valor que preseleccionas es simplemente una cadena de identificador estándar como la del ejemplo.

Un segundo ejemplo: varias personas en una misma reserva

Un formulario de reserva de viajes o eventos que recoge datos de más de un viajero se beneficia de detectar la zona una sola vez para la persona que rellena el formulario y aplicarla después como valor predeterminado compartido para cada viajero, en lugar de volver a consultarla por cada uno. Cada campo de viajero sigue siendo editable individualmente, ya que una reserva de grupo suele incluir personas que se unen desde una zona distinta a la de quien rellena el formulario.

Dejar que el visitante lo cambie

Un selector de zona horaria existe precisamente porque la detección basada en IP no siempre acierta, sobre todo para un visitante que usa una VPN o que está de viaje. Deja siempre el campo editable y guarda lo que el visitante elija explícitamente por encima del valor detectado, sin volver a detectar y sobrescribir su elección en una visita posterior.

Un error habitual que debes evitar

No des por hecho que un país grande corresponde a una sola zona horaria solo porque tus consultas de ejemplo muestren casualmente un único identificador limpio. Los países que abarcan varias zonas devolverán la zona concreta que coincida con la ubicación real del visitante, que es justo el detalle que hace que la detección basada en IP sea más útil que una suposición a nivel de país, pero solo si tu formulario confía en el identificador concreto devuelto en lugar de sustituirlo por una única zona predeterminada para todo el país.

Detecta una vez, no en cada visita

Ejecuta la detección una sola vez, la primera vez que un visitante configura su cuenta o sus preferencias, y guarda el resultado. Repetirla en cada inicio de sesión desperdiciaría solicitudes sin aportar valor, ya que la zona elegida por un visitante, una vez fijada a propósito, debe mantenerse salvo que la cambie él mismo.

Si ya tienes coordenadas concretas en lugar de una dirección IP, como una dirección de entrega que escribió un visitante, /v1/timezone resuelve la zona directamente a partir de la latitud y la longitud, y también puede aceptar una marca de tiempo concreta, lo que resulta útil cuando necesitas saber la zona tal como se aplicaba en un momento determinado y no ahora mismo.

Lo que cuesta

Una sola consulta por cada nueva cuenta o configuración de preferencias es una solicitud. Incluso un servicio que registra un flujo constante de nuevos usuarios cada día se mantiene holgadamente dentro de las 2.500 solicitudes gratuitas al día incluidas con cada clave, o disponibles desde una sola dirección sin clave, usando solo esta función.

Detectar un valor predeterminado sensato y luego apartarse es el equilibrio adecuado para un selector de zona horaria. Los detalles completos de los campos están en la documentación de consulta de IPv4 y en la documentación de consulta de zona horaria.