Set global time zone

JavascriptDatetimeTimezoneMomentjs

Javascript Problem Overview


I am using Moment.js to handle dates in my web application. The server returns all the dates in milliseconds UTC. Now, I have to display the dates applying a specific timezone (based on the user settings).

Is there any way to set the timezone globally instead of changing all the calls to momentjs to handle it?

Javascript Solutions


Solution 1 - Javascript

You can set the default timezone in Moment by using:

moment.tz.setDefault(String);
For example
moment.tz.setDefault("America/New_York");

Solution 2 - Javascript

  1. npm install moment-timezone
  2. var moment = require('moment-timezone'); and use this object instead of usual moment.
  3. moment.tz.setDefault(String); where String is a time zone identifier.

For example:

var moment = require('moment-timezone');
moment.tz.setDefault("America/New_York");

Docs: https://momentjs.com/timezone/docs/

Solution 3 - Javascript

Use the moment-timezone library found on the same website: http://momentjs.com/timezone/ It let's you do things like:

moment(utcDateTime).tz(settings.timezone).format(settings.dateFormat);

I recommend implementing a user class/object that has a service function for translating UTC to the user's timezone. Have a look at this fiddle:

http://jsfiddle.net/guidosch/ofd4unhu/4/

The dates are served as UTC, but the view uses the date formatting method of the user class to adjust and format the UTC date according to the user's preferences.

Solution 4 - Javascript

Having run into this problem in the past, my solution was to create a moment factory that provisioned moment objects rom a base configuration. You can make it as transparent as requiring moment - referencing your package and using the class just like moment - but in reality you are calling a moment wrapper object that provisions the moment implementations with the selected timeZone.

Solution 5 - Javascript

I've not done extensive testing, but it looks right on cursory tests. I was able to do this with Moment Timezone 0.0.1:

var serverTimezoneOffset = <?php echo timezone_offset_get(new DateTimeZone(date_default_timezone_get()), new DateTime('now')) / -60; ?>;
moment.updateOffset(new Date().getTimezoneOffset()-serverTimezoneOffset);

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionFabrizio FortinoView Question on Stackoverflow
Solution 1 - JavascriptOliver SalzburgView Answer on Stackoverflow
Solution 2 - Javascriptuser10294571View Answer on Stackoverflow
Solution 3 - JavascriptguidosView Answer on Stackoverflow
Solution 4 - JavascriptScott FanettiView Answer on Stackoverflow
Solution 5 - Javascriptstephenr85View Answer on Stackoverflow