sinfin / folio

MIT License
6 stars 2 forks source link

Zavedení `timezone` pro uživatele #272

Closed foton closed 1 week ago

foton commented 2 weeks ago

default bude podle aplikace config.time_zone.

Problémy můžou nastat pro kešování, pokud budem vypisovat přímo lokalizovaný čas. V tu chvíli by bylo lepší využít https://github.com/basecamp/local_time ( v html je UTC a JS ho přepíše podle lokálního času prohlížeče).

To ale neřeší zadávání časů uživatelem .

good to read: https://thoughtbot.com/blog/its-about-time-zones

foton commented 2 weeks ago

Inspirace též v https://github.com/tomichj/user_time_zones/tree/master/lib/user_time_zones

foton commented 2 weeks ago

config.time_zone = 'Prague' # v application.rb config/environments/*.rb current_user.time_zone = 'Hawaii' # kéž by utc_before_cz_daylightsaving_change=Time.utc(2024,3,31,0,59) utc_after_cz_daylightsaving_change=Time.utc(2024,3,31,1,00)

 before_daylightsaving_change.in_time_zone("Prague")
 # => Sun, 31 Mar 2024 01:59:00.000000000 CET +01:00

 after_daylightsaving_change.in_time_zone("Prague")
 # => Sun, 31 Mar 2024 03:00:00.000000000 CEST +02:00

čtení: časy z DB (UTC) do lokálního času 1) I18n.l(time_utc.in_time_zone) # bere application.config.time_zone 2) I18n.l(time_utc.in_time_zone(current_user.time_zone)) # bere application.config.time_zone 3) I18n.l(Time.use_zone(current_user.time_zone) { time_utc }) # lze využít v around_action filteru 4) gem local_time(time_utc) # bere time zone podle prohlížeče, nevyužitelné pro exporty do souborů

zápis: čas od uživate do UTC 1) form helper time_field_tag :some_time, čas je poslán jako string , takže se stejně musí parsovat (ale to možná udělá ActiveRecord)