Top Banner
Time Zones in JavaScript hodak monterail.com
34

Time zones in JavaScript

Apr 16, 2017

Download

Software

Adam Hodowany
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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?