momentjs toDate() - timezone gets reset

后端 未结 3 554
长发绾君心
长发绾君心 2021-02-13 22:12

I am working with momentjs and converting dates to different time zones using convertedDate = moment().utcOffset(timezone).format(). This works well but it is a str

相关标签:
3条回答
  • 2021-02-13 22:17

    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.

    0 讨论(0)
  • 2021-02-13 22:30

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

    0 讨论(0)
  • 2021-02-13 22:33

    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
    0 讨论(0)
提交回复
热议问题