Jak zmienic TimeZone zaleznie od lokalizacji uzytkownika?

0

Witam,

Mam sklep online. Musze wyswietlic sprzedaz zaleznie od lokalizacji klienta. Jezeli wyprzedaz zaczyna sie o 11:00 w PL, to wiadomo, ze np w UK bedzie to 10:00. Jakies pomysly jak pobrac lokalizacje/time zone?

2

Tzn czego dokładnie nie wiesz? Jaką strefe ma user? Nie bez powodu w większośc stron w ustawieniach w profilu masz do wyboru strefę, to jedyny w 100% pewny sposób. Jeśli nie masz rejestracji to po prostu strefę uzależnia się od wersji językowej strony lub języka ustawionego w przeglądarce.

Co do wysprzedaży to przecież dzieje się niezależnie od strefy.

0

@mr_jaro: Mam jezyk, ale przeciez uzytkownik moze uzyc jezyka Polskiego i byc np w Australii. Myslalem, zeby po adresie IP namierzyc lokalizacje uzytkownika i strefe czasowa i pozniej na tych informacjach wyswietlic odpowiednia godzine.

$datetime = new DateTime();
$timezone = new DateTimeZone('Europe/London');
$datetime->setTimezone($timezone);
echo $datetime->format('F d, Y H:i');
1

ip nie da ci 100% pewności + łatwo to oszukać

0

@mr_jaro Wiem, ze nie da (VPN etc). Ale jak inaczej?

1

tak jak wyjaśniłem wcześniej i nadal nie rozumiem dlaczego ci to potrzebne przy promocji, ja bym zrobił po prostu konwersje daty pokazywanej ale sam start został by określony w utc w bazie danych i wystartował wszędzie równo

0

Ciężko stwierdzić o jakim przypadku sprzedaży piszesz.
Do lokalizowaniu użytkowników możesz skorzystać z geolokacji:
Firefox geo

Możesz też skorzystać z rozwiązania które oferuje na przykład https://www.aliexpress.com/
Czyli wybieranie lokalizacji statycznie.

Lokalizację zawsze można sfałszować. Jeśli sprzedaż jest zależna od lokalizacji, to lepiej zrobić, aby nie była.
Lokalizacja powinna upraszczać życie użytkownikom, a nie je utrudniać.

1

Geolokalizacja to zły pomysł w tym wypadku. Można ją oszukać prosto, a do tego trzeba przyznać uprawnienia, bo inaczej nici.

Tak jak @mr_jaro napisał, zwykłe zapisywanie daty startu wyprzedaży do jakichś ustawień + porównywanie z czasem serwera w UTC wystarczy.

0

@serek Przecież na serwerze zawsze będzie taka sama godzina. Nie zależnie czy user odwiedza sklep online z Polski czy z Chin. Chyba dalej nie kumam Waszych rozwiązań :(

0

oczywiście, że tak i tak się robi, czyli robisz promocje np 2 dni przyjmujesz jakaś godzinę startu i masz gdzieś to, że w to polsce 18 a w chinach 8

0

@mr_jaro: Ok, ale co mam zrobić? Przecież potrzebuje jakąś lokalizacje czy coś a skąd to mam wziąć. Sorry, nie kumam o co kaman w twoim pomysle.

1

to polecam się podszkolić z logicznego myślenia. Strefę czasową możesz użyć tylko do pokazania godziny, ale nie do tego czy jest obecnie promocja czy jej nie ma.

0

@mr_jaro Wydaje mi sie, że się mijamy troche. Mi chodzi wyłącznie o wyświetlenie odpowiedniej godziny zależnie od lokalizacji. To wszystko. Pytanie jest na czym oprzeć, albo jak przekonwertować czas z serwera na dana lokalizacje użytkowniką. Bo opcji jest kilka :p

edit
Myślałem, zeby uzyc np :
https://www.php.net/manual/en/book.geoip.php
https://github.com/maxmind/GeoIP2-php/releases

ale odradzacie. Wiec zamiast takiego rozwiazania co innego moge uzyc?

3

Nie ma pewnej metody. Każde ustawienia można zmienić świadomie bądź niechcący.
Przykład Rosji- mają kilka stref czasowych i np. Ip może się wyświetlać w jednej strefie, użytkownik być w drugiej. Wykrycie języka też nie pomoże bo jest "ru".
Jeśli to rodzaj sklepu to najlepszą metodą wspomnianą już przez @mr_jaro jest możliwość zapisania wybranej przez użytkownika strefy w danych jego konta.

1

A nie możesz zrobić tego w JavaScript? Tzn. prekazać sobie z JS odczytany parametr do PHP?

0

@mr_jaro Sklep juz istnieje ponad 10 lat. Tysiace uzytkowników. I nie mamy zapisanej takiej informacji o uzytkowniku. Wiec raczej odpada.

0

Nie możesz dodać do bazy do tabelki z userami nowej kolumny z informacją o strefie czasowej? Na samym początku ustawiasz nulla. A potem jak ktoś nie ustawi, to np. nie może zrobić zamówienia, póki nie zmieni tego. Albo po prostu ustaw domyślną strefę zamiast nulla na Europe/Warsaw, jeśli większość klientów to Polacy. A jak nie, to np. na Europe/London. Skoro to jest tylko wyświetlanie, to chyba nic się wielkiego nie stanie, jak przez chwilę ktoś będzie miał złą strefę czasową. Możesz np. tymczasowo dodać alerta z tekstem "proszę ustawić Twoją strefę czasową".

0

Mogę tak zrobić, ale tutaj tez jest kilka problemów. Bo jak mamy wyprzedaż biletów na wydażenie to każda minuta jest ważna. Chodzi o to, że takie przedsprzedaże mają limitowaną ilość biletów. I często jest tak, że lubie trochę walczą o te bilety. Mamy czasme 500-100 użytkowników. Po drugie użytkownik nie musi być zalogowany, żeby widzieć liste biletów. Wiec moze widziec złą godzinę/date. I moze łatwo ominąc przed sprzedaż. Nie wiem czy dobrze to wytłumaczyłem? Musi być jakieś sensowne rozwiązanie.

0
poniatowski napisał(a):

Mogę tak zrobić, ale tutaj tez jest kilka problemów. Bo jak mamy wyprzedaż biletów na wydażenie to każda minuta jest ważna. Chodzi o to, że takie przedsprzedaże mają limitowaną ilość biletów. I często jest tak, że lubie trochę walczą o te bilety. Mamy czasme 500-100 użytkowników. Po drugie użytkownik nie musi być zalogowany, żeby widzieć liste biletów. Wiec moze widziec złą godzinę/date. I moze łatwo ominąc przed sprzedaż. Nie wiem czy dobrze to wytłumaczyłem? Musi być jakieś sensowne rozwiązanie.

Strona jest wielojęzyczna? Jak nie, to ustawiasz taką strefę, która odpowiada językowi. Tak jest zwykle, a to, że jesteś z innej strefy, to Twój problem.

Ewentualnie zamontuj u góry strony na czas wyprzedaży kilka zegarów, każdy dla innej strefy xD

EDIT: Albo walnij odliczanie. To będzie zawsze prawidłowe, bez względu na strefę czasową.

0

Najlepsze co możesz zrobić, to pogodzić się z tym, że nie da się tego zrobić. Ostatecznie, taki system ZAWSZE można oszukać. Nawet takie platformy jak Valve nie potrafią zawsze skutecznie walczyć z użytkownikami np. z USA, którzy podszywają się pod Bagladesz, żeby mieć grę za 15% wartości, a mówimy o sytuacji gdzie użytkownik ma zainstalowany Steam - czyli praktycznie porogram który może o wiele więcej sprawdzić w systemie klienta, niż "Ty" będąc stroną internetową. Odpuść sobie, a jak Cię szef naciska to mu to wyjaśnij, a jak dalej nie rozumie, to znaczy, że jest, za przeproszeniem, debilem, i wtedy radzę zmieniać pracę.

2

Ja bym poszedł w kierunku odliczania czasu do rozpoczęcia wyprzedaży.

Allegro:
screenshot-20191014235220.png

X-kom:
screenshot-20191014235246.png

0

Najprościej będzie przez JS. Zobacz tutaj
Jedynie pozostaje kwestia czy klient ma dobrą strefę ustawioną na urządzeniu.

0

Też trochę lipa. Ja chcę użyć 2-3 metod. IP address oraz nagłówki wysyłane z przegladarki, czyli ustawienia w przegladarce. To samo masz na mysli.

0

A czemu nie chcesz zrobić tego odliczania?

Tak do usranej śmierci możesz nad tym myśleć, a idealnego sposobu raczej nie znajdziesz.

0

@serek Wiem, ze nie znajde idealnego rozwiazania. Ale 95% mi pasuje. Decyzja padła juz i to nie ode mnie zalezy. Ma tak byc i tyle. Wiec szykam najlepszego sposobu.

0

Skoro w tym wątku zaczyna się gonienie w koło macieja, to pozwole sobie na małą uwagę. Najgorsze kierownictwo to takie, które jest odporne na racjonalne argumenty, wspołczuję. Mam to szczęście, że wykonuję zlecenia dla ludzi, którzy nie są uparci, i których można przekonać, a to w naszym kraju nie jest takie oczywiste. Jest jeszcze głębszy level tej głupoty, to wtedy, kiedy ostrzegasz kierownictwo, że coś się może źle skończyć, po czym kiedy się tak kończy, wina zostaje zwalona na Ciebie :)

PS. w Historii dobrym przykładem takiego postepowania jest oskarżenie gen. Sosabowskiego o porażkę pod Arnhem - operacja "Market Garden". Brytole często "brylują" takim postępowaniem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1