Guias

Mostre o horário de funcionamento certo com base na localização do visitante

"Estamos abertos até as 18h" só é útil se o visitante que lê souber de quais 18h você está falando. Um visitante em um fuso horário diferente do da sua empresa precisa que essa comparação seja feita no horário local dele, não no seu.

Obter o fuso horário do visitante

Uma única consulta de IP retorna diretamente um campo timezone, oferecendo o que você precisa sem uma chamada separada.

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"
}

Comparar com o seu horário de funcionamento

Converta o horário de funcionamento da sua empresa, armazenado no fuso horário da própria empresa, para o fuso do visitante usando o identificador de fuso horário que você acabou de obter e depois compare com o horário local atual do visitante para decidir se mostra "aberto agora" ou "fechado", junto com o horário local de referência que você está exibindo.

Um segundo exemplo: uma empresa com mais de uma unidade

Uma empresa com unidades em cidades diferentes deve consultar o horário publicado de cada unidade no fuso horário armazenado dela e depois comparar cada um separadamente com o fuso do visitante, em vez de presumir que um único horário vale para todas. Isso importa principalmente quando um visitante compara duas unidades na mesma página, já que uma pode aparecer como aberta e a outra como fechada exatamente no mesmo momento se estiverem em fusos diferentes ou adotarem o horário de verão de forma diferente.

Deixar claro a qual fuso horário você se refere

Em vez de converter silenciosamente e torcer para que o visitante entenda, mostre as duas informações com clareza, algo como "Fechado no momento. Abre às 9h no seu horário (Asia/Tokyo)." Ser explícito evita confusão quando uma empresa opera dos dois lados de uma fronteira em que um lado muda com o horário de verão e o outro não.

Um erro comum a evitar

Não calcule a comparação de aberto ou fechado uma única vez para guardar esse resultado booleano em cache pelo resto da sessão do visitante. Uma comparação feita às 5:55 da tarde vai indicar "aberto" e continuar errada às 6:05 se o estado de aberto for guardado em cache em vez de recalculado. Guarde em cache o identificador de fuso horário do visitante, já que ele é realmente estável durante uma sessão, mas recalcule a comparação de aberto ou fechado a cada renderização.

Um caso extremo: fusos que não adotam horário de verão

Algumas regiões mantêm um deslocamento fixo o ano inteiro, enquanto uma região vizinha muda duas vezes por ano, o que significa que a diferença entre os dois fusos não é constante ao longo do calendário. Se a sua lógica de comparação fixar no código um deslocamento em horas, em vez de trabalhar a partir do identificador de fuso horário e deixar a sua biblioteca de datas cuidar da conversão, ela vai sair de sincronia justamente nas semanas próximas a uma mudança de horário de verão.

Guardar em cache o fuso, não o estado de aberto

O identificador de fuso horário do visitante é estável durante uma sessão e vale a pena guardá-lo em cache. Se a empresa está aberta no momento muda ao longo do dia, então recalcule essa comparação na hora da renderização usando o fuso em cache, em vez de guardar em cache o estado de aberto ou fechado.

Verificar um momento específico no passado ou no futuro

Se você precisar saber qual era, ou qual será, o deslocamento em um momento específico, e não agora, como confirmar em que horário um pedido feito ontem realmente foi feito no fuso do cliente, /v1/timezone aceita um parâmetro opcional time como timestamp unix exatamente para esse tipo de verificação no passado ou no futuro.

Custo das requisições

Uma consulta de IP por nova sessão de visitante cobre esse recurso. É uma única requisição guardada em cache durante a visita, o que mantém uma loja virtual movimentada bem dentro das 2.500 requisições gratuitas por dia incluídas em cada chave.

Acertar o "aberto agora" para um público global é questão de uma consulta e de uma comparação de horário simples, e não de um recurso complicado. A documentação de consulta IPv4 lista o formato completo da resposta.