momentjs toDate() - timezone gets reset

A cleaner approach to get a native Date object with time according to the timezone, using moment would be following:

convertedDate = moment.utc(moment.tz(timezone).format('YYYY-MM-DDTHH:mm:ss')).toDate()

PS: assuming two things

  • you have imported both 'moment' and 'moment-timezone'.
  • value of timezone is given like 'Asia/Kolkata' instead of an offset value

So I wasn't very far off. The format needs to exclude timezone for it to work. This code finally worked how I needed it to.

convertedDate = new Date(moment().utcOffset('-4').format('YYYY-MM-DD HH:mm'));


This should work:

I have the same issue. Just get the Date as a string using the same approach that you are using. Let's say your date is, for example: '2018-08-05T10:00:00'.

Now you need the Date object with correct time. To convert String into object without messing around with timezones, Use getTimezoneOffset:

var date = new Date('2016-08-25T00:00:00')
var userTimezoneOffset = date.getTimezoneOffset() * 60000;
new Date(date.getTime() - userTimezoneOffset);

getTimezoneOffset() will return either negative or positive value. This must be subtracted to work in every location in the world.