我正在运行一个基于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
2条答案
按热度按时间5sxhfpxr1#
我终于想出了如何解决我的问题,那就是使用
moment-timezone
库。强制它转换为特定的时区,然后格式化日期。xoefb8l82#
如果您想使用
date-fns
本地化和格式化日期,我建议使用date-fns-tz。您可以通过多种方式解决这个问题,但是尽量不要使用
moment
和moment-tz
,因为根据他们的文档我们现在普遍认为Moment是一个处于维护模式的遗留项目,它还没有死,但它确实已经完成了。