如何在Google Firebase函数上实现日期本地化

vbkedwbf  于 2023-04-13  发布在  Go
关注(0)|答案(2)|浏览(139)

我正在运行一个基于Google Firebase平台的应用程序,使用了多个云函数。一切都很好,但我就是不能让日期本地化工作。我做了一个测试函数(见下文),我尝试了我能想到的一切,看看如何从平台中获得正确格式的日期,但没有任何效果。
日期只是不断得到格式化和偏移到UTC我相信(见下面的回应)。
有什么我忽略的地方吗?有没有其他建议我可以尝试?
我已经使用Node.js 10(beta)运行器在“europe-west 1”(实际上应该已经在我想要的时区...:D)中部署了该函数。(我也在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

5sxhfpxr

5sxhfpxr1#

我终于想出了如何解决我的问题,那就是使用moment-timezone库。强制它转换为特定的时区,然后格式化日期。

xoefb8l8

xoefb8l82#

如果您想使用date-fns本地化和格式化日期,我建议使用date-fns-tz
您可以通过多种方式解决这个问题,但是尽量不要使用momentmoment-tz,因为根据他们的文档
我们现在普遍认为Moment是一个处于维护模式的遗留项目,它还没有死,但它确实已经完成了。

相关问题