Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert Moment.js date to users local timezone?

I use the Moment.js and Moment-Timezone frameworks, and have a Moment.js date object which is explicitly in UTC timezone. How can I convert that to the current timezone of the browser?

var testDateUtc = moment.tz("2015-01-30 10:00:00", "UTC"); var localDate = ???

So it would be fine if I could find out the users local time zone; or alternatively I'd like to convert the date object into another data object which just uses the "local timezone", no matter what that actually is.

like image 437
oliver Avatar asked Mar 23 '15 21:03

oliver


People also ask

How do I get local time zones with my moment?

To get a list of all available time zone names, use moment. tz. names . moment.

Does moment convert UTC to local?

To convert UTC time to Local you have to use moment. local() .

How do I change a moment date to a specific format?

Date Formatting Date format conversion with Moment is simple, as shown in the following example. moment(). format('YYYY-MM-DD'); Calling moment() gives us the current date and time, while format() converts it to the specified format.


2 Answers

You do not need to use moment-timezone for this. The main moment.js library has full functionality for working with UTC and the local time zone.

var testDateUtc = moment.utc("2015-01-30 10:00:00"); var localDate = moment(testDateUtc).local(); 

From there you can use any of the functions you might expect:

var s = localDate.format("YYYY-MM-DD HH:mm:ss"); var d = localDate.toDate(); // etc... 

Note that by passing testDateUtc, which is a moment object, back into the moment() constructor, it creates a clone. Otherwise, when you called .local(), it would also change the testDateUtc value, instead of just the localDate value. Moments are mutable.

Also note that if your original input contains a time zone offset such as +00:00 or Z, then you can just parse it directly with moment. You don't need to use .utc or .local. For example:

var localDate = moment("2015-01-30T10:00:00Z"); 
like image 154
Matt Johnson-Pint Avatar answered Oct 01 '22 21:10

Matt Johnson-Pint


var dateFormat = 'YYYY-DD-MM HH:mm:ss'; var testDateUtc = moment.utc('2015-01-30 10:00:00'); var localDate = testDateUtc.local(); console.log(localDate.format(dateFormat)); // 2015-30-01 02:00:00 
  1. Define your date format.
  2. Create a moment object and set the UTC flag to true on the object.
  3. Create a localized moment object converted from the original moment object.
  4. Return a formatted string from the localized moment object.

See: http://momentjs.com/docs/#/manipulating/local/

like image 31
AndrewHenderson Avatar answered Oct 01 '22 22:10

AndrewHenderson