34
Time Zones in JavaScript hodak monterail.com

Time zones in JavaScript

Embed Size (px)

Citation preview

Page 1: Time zones in JavaScript

Time Zones in JavaScript

hodak monterail.com

Page 2: Time zones in JavaScript

https://en.wikipedia.org/?title=Time_zone#/media/File:World_Time_Zones_Map.png

Page 3: Time zones in JavaScript

Daylight Saving Time Explained by CGP Grey

https://youtu.be/84aWtseb2-4

Page 4: Time zones in JavaScript
Page 5: Time zones in JavaScript

<select>

Page 6: Time zones in JavaScript
Page 7: Time zones in JavaScript

Time Zone != Offset

Page 8: Time zones in JavaScript

UTC - time standard GMT - time zone

(since 1972)

Page 9: Time zones in JavaScript

Date formats

Page 10: Time zones in JavaScript

Best case scenario - ISO 8601

offset

2015-06-25T07:38:12+00:00

2015-06-25T07:38:12+0000

2015-06-25T07:38:12+04:30

2015-06-25T07:38:12-01:00

2015-06-25T07:38:12-04

Page 11: Time zones in JavaScript

2015-06-25T07:38:12Z

Page 12: Time zones in JavaScript

2015-06-25T07:38:12ZZulu time == UTC

Page 13: Time zones in JavaScript

Other formats

Page 14: Time zones in JavaScript
Page 15: Time zones in JavaScript

2018-10-06T23:21:00+01:00

My system’s offset: +2

Page 16: Time zones in JavaScript

date = '2018-10-06T23:21:00+01:00'

$filter('date')(date, 'dd-MM-yyyy')=> 07-10-2018

moment(date).format('DD-MM-YYYY')=> 07-10-2018

new Date(date).toString()=> Sun Oct 07 2018 00:21:00 GMT+0200 (CEST)

Page 17: Time zones in JavaScript

date = '2018-10-06T23:21:00'

$filter('date')(date, 'dd-MM-yyyy')=> 06-10-2018

moment(date).format('DD-MM-YYYY')=> 06-10-2018

new Date(date).toString()=> Sun Oct 07 2018 01:21:00 GMT+0200 (CEST)

Page 18: Time zones in JavaScript

date = '2018-10-06'

$filter('date')(date, 'dd-MM-yyyy')=> 06-10-2018

moment(date).format('DD-MM-YYYY')=> 06-10-2018

new Date(date).toString()=> Sat Oct 06 2018 02:00:00 GMT+0200 (CEST)

Page 19: Time zones in JavaScript

date = '2018-10-06'

$filter('date')(date, 'dd-MM-yyyy')=> 06-10-2018

moment(date).format('DD-MM-YYYY')=> 06-10-2018

new Date(date).toString()=> Fri Oct 05 2018 21:00:00 GMT-0300 (BRT)

My system’s offset now: -3

Page 20: Time zones in JavaScript

WHAT IF

We’d like to show date and time in user’s time zone that doesn’t equal her operating system’s time zone?

Page 21: Time zones in JavaScript
Page 22: Time zones in JavaScript

AngularJS

Page 23: Time zones in JavaScript

AngularJS

Page 24: Time zones in JavaScript
Page 25: Time zones in JavaScript

angular.module('project').filter('myDate', function($filter, User) { return function(input) { return $filter('date')(input, 'dd-MM-yyyy', User.current.timezone_offset); };});

Page 26: Time zones in JavaScript

How to get offset?

Page 27: Time zones in JavaScript

1. It’s back-end problemtz = ActiveSupport::TimeZone.new("Europe/Warsaw")

tz.utc_offset=> 3600 # offset in seconds: +1 hour even thoughcurrently it’s DST and it should be +2

tz.now.dst? # now -> passing the context=> true

tz.at(6.months.ago).dst?=> false

tz.now.utc_offset=> 7200

Page 28: Time zones in JavaScript

2. It’s front-end problem

jmp momenttimezone

Page 29: Time zones in JavaScript

Moment Timezone

Page 30: Time zones in JavaScript
Page 31: Time zones in JavaScript

moment('2018-10-06T23:21:00+01:00') .tz('America/Los_Angeles') .format()=> 2018-10-06T15:21:00-07:00

Page 32: Time zones in JavaScript

moment.tz .setDefault('America/Los_Angeles')

moment('2018-10-06T23:21:00+01:00') .format()=> 2018-10-06T15:21:00-07:00

Page 33: Time zones in JavaScript

Possible problem?

'America/Los_Angeles'

Rails match this format:

https://github.com/rails/rails/blob/a0a6e0292f66b546a3aee6893136a89bfd10579c/activesupport/lib/active_support/values/time_zone.rb#L43

Page 34: Time zones in JavaScript

Thank youQuestions?