Search code examples
react-nativemomentjsutc

convert local time to utc and add to utc datetime moment


I have a user input where the user enters year, month and day and I create a date object

  let userDate = new Date(year, month, day)

and then from a user input where the user enters minutes and hours (into variables minutes and hours)

I need to convert this date and time into UTC timestamp, using moment and I'm not sure about it. Can I just do

  let utcTimestamp = moment.utc(date.toISOString()).hour(hours).minutes(minutes);

For example: if a user enters a date of 13-Mar-2018 and time of 8:45 AM (in GMT timezone), then I could use the above line of code to get UTC timestamp as I can directly add hours and minutes to the date

if a user enters a date of 13-Aug-2018 and time 8:45 (which is GMT +1, due to daylight savings time change) then with above line I might be creating a wrong date.


Solution

  • ... I create a date object

    let userDate = new Date(year, month, day)
    

    Be careful here, you need to subtract 1 from the month, as they are numbered 0-11 by the Date instead of the usual 1-12.

    and then from a user input where the user enters minutes and hours (into variables minutes and hours)

    I need to convert this date and time into UTC timestamp, using moment ...

    You don't need Moment for this. Just call .toISOString() on the Date object. It implicitly converts to UTC before generating the string.

    var utcString = new Date(year, month-1, day, hours, minutes).toISOString();
    

    ... Can I just do

    let utcTimestamp = moment.utc(date.toISOString()).hour(hours).minutes(minutes);
    

    No, that doesn't make sense. That would only work if the date was entered in local time but the time was entered in UTC. Such a difference in behavior would surely be confusing to your user - especially if the UTC date was different than the local date.

    ... if a user enters a date of 13-Aug-2018 and time 8:45 (which is GMT +1, due to daylight savings time change) then with above line I might be creating a wrong date.

    The conversion from local time to UTC will automatically take into account any daylight saving adjustment that is being observed by the local time zone. You do not need to do any additional adjustment on your own.