AtB-AS / webshop

AtB Webshop / AtB Nettbutikk
https://nettbutikk.atb.no
European Union Public License 1.2
0 stars 1 forks source link

fix: Time zone error on fare contract #435

Closed gorandalum closed 2 years ago

gorandalum commented 2 years ago

Removed usage of the FareTime object which where parsed in js. The FareTime object did not take into consideration the current timezone. It could have been modified to work with timezone, but I found it easier to just use epoch millis on the model objects, and format them correctly in the views where they are used.

github-actions[bot] commented 2 years ago

Visit the preview URL for this PR (updated for commit 884ccd7):

https://atb-webshop-staging--pr435-dalum-fix-timezone-e-sxbpq65k.web.app

(expires Fri, 03 Dec 2021 08:31:10 GMT)

🔥 via Firebase Hosting GitHub Action 🌎

mjenssen commented 2 years ago

Usikker på om dette ble rett. Tok et utdrag av noen ordrer jeg hadde på kontoen min i staging. createdAt er hentet fra "get order" APIet til Entur og ser ut til å alltid være i UTC.

BL9Z3DKN "createdAt": "2021-09-08T11:38:22Z" vises som 11:38 i historikk (skulle vel vært 13:38 med CEST?)

JBZ6XJBS "createdAt": "2021-11-01T08:50:38Z" vises som 08:50 i historikk (skulle vel vært 09:50 med CET?)

AYA5VZ5V "createdAt": "2021-06-25T15:39:03Z" vises som 15:39 i historikk (skulle vel vært 17:39 med CEST) vises som 16:39 i oversikt (skulle vel vært 17:39 med CEST)

Til slutt kjøpte jeg en ny billett:

PVNCU3US "createdAt": "2021-11-29T20:39:45Z" vises som 20:39 i historikk vises som 21:39 i oversikt (klokka var 21:39)

gorandalum commented 2 years ago

Bra fanget opp @mjenssen. Fikset det nå, det var oppdatering av tidssone som ikke ble kjørt når man åpnet siden.

mjenssen commented 2 years ago

Oversikt og historikk er lik nå, men det blir fortsatt feil på sommertid vs vintertid. Altså at billetter kjøpt under sommertid vises feil når man ser på de billettene under vintertid og omvendt. Se f.eks. AYA5VZ5V som ble kjøpt i juni, kjøpt 15:39 UTC. På sommeren har vi CEST som er UTC+2 og det var da 17:39 CEST. Nå er vi i CET som er UTC+1 og det vises 16:39. Mulig dette er en separat issue, men det er uansett feil.

Problemet er egentlig at browseren bare gir offset akkurat nå og ikke fullverdig tidssoneinformasjon, typ Europe/Oslo som er typisk for Norge. Denne tidssoneinformasjonen kan du hente ut fra https://package.elm-lang.org/packages/justinmimbs/timezone-data/5.1.2/ eventuelt kan vi lage en backend-tjeneste som kan gi deg den (denne dataen er veldig stor og det er ikke spesielt nyttig å ta med alle tidssoner i hele verden). Selve tidssonen ("Europe/Oslo") kan man hente ut med Intl.DateTimeFormat().resolvedOptions().timeZone men det er ikke en god måte å overvåke endringer foruten å ha en timer som sjekker om verdien er endret.

gorandalum commented 2 years ago

Skjønner greia. Jeg spurte Entur om de gjorde noen kompensering i sine UTC tidspunkter ved tidssone-endringer, men det gjorde de ikke. Så hvis man 20:00 lokal tid kjøper en 24-timers billett kvelden før tidssone-endring, så vil billetten i praksis gå ut 19:00 eller 21:00 lokal tid kvelden etter, basert på hvilken vei man stilte klokken. Det er slik det er gjort hos Entur, og ikke noe vi klarer å "fikse" på vår side.

Det som henger igjen er at de forskjellige tidspunktene blir evaluert med nettleserens nåværende tidssone. Så hvis man på kvelden kjøper en 24-timers billett 20:00 lokal tid så står det ved kjøpetidspunktet at den varer til 20:00 kvelden etter. Og når man kommer til kvelden etter så står det at billetten er kjøpt 19:00 og utløper 19:00, siden tidssonen i mellomtiden er endret.

Uansett er denne saken en forbedring fra slik det var, så jeg tenker denne kan merges slik den er også lager vi en ny sak på å enda grundigere fikse dette.