how to disable moment.js daylight timezone conversion how to disable moment.js daylight timezone conversion angularjs angularjs

how to disable moment.js daylight timezone conversion


If you are saying that you want moment to display your date and time (which is UTC, as indicated by the 'Z'), exactly as is, you should use moment.utc:

moment.utc('2016-06-03T04:00:00.000Z').format()"2016-06-03T04:00:00Z"

When you use the default moment constructor, as you are now, you are telling moment to convert your UTC time to local time, and this is why you are seeing a time difference. For instance, on my local machine (I am currently UTC-5) I get the following:

moment('2016-06-03T04:00:00.000Z').format()"2016-06-02T23:00:00-05:00"

This question comes up quite a lot, so I wrote this blog post that explains moment's constructor functions and how it converts ISO8601 dates in detail: https://maggiepint.com/2016/05/14/moment-js-shows-the-wrong-date/


In my case, I had a problem with timezone changing due to 'daylight saving time'.

I had the next period:

{    "from": "2020-10-01 00:00:00 +0200",    "to":"2020-11-01 00:00:00 +0100",}

And I wanted to get:

{    "from": "2020-10-01 00:00:00 +0200",    "to":"2020-11-01 00:00:00 +0200",}

My solution is to get current (local) timezone and set it to the both date moment:

const currentTzOffset = moment().utcOffset(); // getting current timezone offsetconst startToLocalZone = moment(from, yourDateFormat)    .local() // just checking. not sure if this is necessary    .utcOffset(currentTzOffset) // put your tz to here    .format(yourDateFormat);const endToLocalZone = moment(to, yourDateFormat)    .local() // just checking. not sure if this is necessary    .utcOffset(currentTzOffset) // put your tz to here    .format(yourDateFormat);console.log(startToLocalZone); // output: "2020-10-01 00:00:00 +0200"console.log(endToLocalZone); // output: "2020-11-01 00:00:00 +0200"

And dont forget to set your date format instead 'yourDateFormat'