Fabrizio Fortino
Fabrizio Fortino

Reputation: 1606

Set global time zone

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?

Upvotes: 75

Views: 78102

Answers (5)

user10294571
user10294571

Reputation:

  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/

Upvotes: 11

Oliver Salzburg
Oliver Salzburg

Reputation: 22099

You can set the default timezone in Moment by using:

moment.tz.setDefault(String);

For example

moment.tz.setDefault("America/New_York");

Upvotes: 110

guidos
guidos

Reputation: 542

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.

Upvotes: 3

Scott Fanetti
Scott Fanetti

Reputation: 136

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.

Upvotes: -6

stephenr85
stephenr85

Reputation: 189

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);

Upvotes: -14

Related Questions