Как заставить локализацию дат работать с функциями Google Firebase - PullRequest
0 голосов
/ 17 апреля 2020

Я запускаю приложение на основе платформы Google Firebase, используя несколько облачных функций. Все работает нормально, но я просто не могу заставить работать локализацию дат. Я сделал тестовую функцию (см. Ниже), где я попробовал все, что мог придумать, чтобы увидеть, как можно получить правильно отформатированную дату из платформы, но ничего не получалось.

Дата просто продолжает форматироваться и смещаться к UT C Я верю (см. ответ ниже).

Есть ли что-то, что я пропускаю? Есть ли другие предложения, которые я мог бы попробовать?

Я развернул функцию в "europe-west1" (которая должна уже быть в том часовом поясе, который я хочу ...: D), используя Node.js 10 ( бета) бегун (Я также запустил функцию в Node.js 8 с тем же результатом) Мои зависимости на момент написания статьи следующие версии:

    "date-fns": "^2.11.0",
    "firebase-admin": "^8.10.0",
    "firebase-functions": "^3.5.0",
    "moment": "^2.24.0",

Если бы кто-то мог пролить свет на это, это было бы УДИВИТЕЛЬНО!

import moment from "moment";
import "moment/locale/nl-be";
import { format, parseISO } from "date-fns";
import nl from "date-fns/locale/nl";

moment.locale("nl-be");

exports.test = functions
  .region("europe-west1")
  .https.onRequest(async (req, res) => {
    const input = "2020-02-04T15:00:00+01:00";
    const now = new Date();

    return res.status(200).send({
      expectedResult: "04/02/2020 15:00",
      locales: moment.locales(),
      locale: moment.locale(),
      original: input,
      formatted: moment(input).format(),
      basic: moment(input).format("L HH:mm"),
      utc: moment.utc(input).format("L HH:mm"),
      basicLocal: moment(input).local().format("L HH:mm"),
      utcLocal: moment.utc(input).local().format("L HH:mm"),
      forcedLocale: moment(input).locale("nl-be").format("L HH:mm"),
      utcForcedLocale: moment.utc(input).locale("nl-be").format("L HH:mm"),
      parsedDate: parseISO(input),
      dateFnsNoLocal: format(parseISO(input), "dd/MM/yyyy HH:mm"),
      dateFns: format(parseISO(input), "dd/MM/yyyy HH:mm", {
        locale: nl,
      }),
      now: now.toLocaleString("nl-BE"),
      nowMoment: moment(now).format(),
      nowMomentFormat: moment(now).format("L HH:mm"),
    });
  });

ответ:

{
   "expectedResult": "04/02/2020 15:00",
   "locales": [
      "en",
      "nl-be"
   ],
   "locale": "nl-be",
   "original": "2020-02-04T15:00:00+01:00",
   "formatted": "2020-02-04T14:00:00+00:00",
   "basic": "04/02/2020 14:00",
   "utc": "04/02/2020 14:00",
   "basicLocal": "04/02/2020 14:00",
   "utcLocal": "04/02/2020 14:00",
   "forcedLocale": "04/02/2020 14:00",
   "utcForcedLocale": "04/02/2020 14:00",
   "parsedDate": "2020-02-04T14:00:00.000Z",
   "dateFnsNoLocal": "04/02/2020 14:00",
   "dateFns": "04/02/2020 14:00",
   "now": "4/17/2020, 1:55:52 PM",
   "nowMoment": "2020-04-17T13:55:52+00:00",
   "nowMomentFormat": "17/04/2020 13:55"
}

Код дает мне правильные результаты, когда я запускаю его, например, в коде sandebox: https://codesandbox.io/s/nostalgic-germain-b1vty?file= / src / index. js

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...