Hey,
J'ai eu le même cas de figure sur un gros site en développement.
En analysant les types de visite, j'ai isolé trois comportements :
- les visiteurs anonymes qui arrivaient pour la première fois sur le site
- les visiteurs anonymes qui étaient déjà venus
- les visiteurs authentifiés
Comme tu l'as bien dit, on peut récupérer la timezone du client via javascript, tu peux donc l'ajouter au compte d'un utilisateur ou dans un cookie pour les utilisateurs anonymes. Mais pour les utilisateurs anonymes qui n'ont pas encore visité ton site, la méthode la plus simple reste effectivement l'utilisation de l'ip et des techniques de geoip.
C'est un peu gourmand en terme de performance, mais c'est pas la mort non plus (ça n'a pas d'impact visuel), et comme tu ne le fais qu'une fois par utilisateur, c'est pas un drame.
Pour ma part, j'ai utilisé le package npm geoip-lite ( https://www.npmjs.org/package/geoip-lite ), dont je suis très content.
C'est la seule solution viable, au sens où, pour le moment, y a aucun autre moyen de connaître la timezone d'un visiteur dont on ne sait rien.