Javascript: оцените разницу между временем UTC и Центральной Европой - PullRequest
0 голосов
/ 07 марта 2019

У меня есть серверное приложение в облачной функции Firebase с веб-крючками, которые получают данные от стороннего API.В этих данных у меня есть время, выраженное в ЧЧ: мм по местному времени (время в Центральной Европе).Мне нужно хранить их в Firestore как метку времени UTC.

Я пробовал это:

         //Evaluate offset between CET and UTC
        const dAujourdhui = new Date(); //07/03/2019 10:39 (UTC)
        const nHeureUTC = dAujourdhui.getUTCHours(); //10
        const nHeureLocal = dAujourdhui.getHours();  //10
        const timeZoneOffset = nHeureUTC - nHeureLocal //0!

         // Build a timestamp based on today's date and received time
        const currentDateString = dateFormat(dAujourdhui, "yyyy-mm-dd");
        var estimatedDateTimeOfArrival = new Date(`${currentDateString} ${timeReceivedFrom3rdPartyAPI}`);

         // Add offset to hours
        const utcHour = estimatedDateTimeOfArrival.getUTCHours()
        estimatedDateTimeOfArrival.setHours(utcHour + timeZoneOffset)

        // Save to firestore
        ...

Как видите, я не могу оценить смещение между CET и UTC каккод запускается на сервере, установленном в UTC.

Есть идеи, как его решить?

1 Ответ

0 голосов
/ 08 марта 2019

Вот решение, которое я нашел для решения проблемы.Он основан на внешней библиотеке: момент-часовой пояс

        // Example's initial setup
        const dateFormat = require('dateformat')
        const moment = require('moment-timezone');
        const timeReceivedFrom3rdPartyAPI = "14:30" // Format "HH:mm", Paris time

        // Construct Date object with today's date and timeReceivedFrom3rdPartyAPI
        const currentDate = new Date();
        const currentDateString = dateFormat(currentDate, "yyyy-mm-dd");
        const estimatedDateTimeOfArrival = moment.tz(`${currentDateString} ${timeReceivedFrom3rdPartyAPI}`, "Europe/Paris").toDate()

        console.log(estimatedDateTimeOfArrival)
        // 08/03/2018 13:30 UTC
        // Now I have UTC Full Date corresponding to timeReceivedFrom3rdPartyAPI
...