date-fns 将 utc 转换为时区

问题描述 投票:0回答:3

我正在尝试使用 Nodejs 中的 date-fns 来解析 utc 时间到时区

    const date = new Date('2018-09-01T16:01:36.386Z');
    const timeZone = 'Europe/Berlin';
    const zonedDate = utcToZonedTime(date, timeZone);
    // zonedDate could be used to initialize a date picker or display the formatted local date/time

    // Set the output to "1.9.2018 18:01:36.386 GMT+02:00 (CEST)"
    const pattern = "d.M.yyyy HH:mm:ss.SSS 'GMT' XXX (z)";
    const output = format(zonedDate, pattern, { timeZone: 'Europe/Berlin' });
    console.log(output);

我正在使用文档中的这段代码来检查我的问题,但它没有按照文档所述打印。 这是输出:

2018 年 9 月 1 日 18:01:36.386 GMT Z (GMT+0)

我不知道为什么时间部分改变了,但时区仍然是UTC。应该是:

2018 年 9 月 1 日 18:01:36.386 GMT+02:00(中欧夏令时)

注意:我只是使用此示例代码来展示我的问题

节点 14.16.0
日期-fns: 2.21.3
日期-fns-tz:1.1.4

node.js timezone date-fns
3个回答
4
投票

我得到了所需的输出(或非常相似),我想知道为什么你会看到 GMT Z (GMT+0) 时区。在我看来,这与您的操作系统/环境有关。

const { zonedTimeToUtc, utcToZonedTime, format } = require('date-fns-tz')
const os = require('os');

const date = new Date('2018-09-01T16:01:36.386Z');
const timeZone = 'Europe/Berlin';
const zonedDate = utcToZonedTime(date, timeZone);
// zonedDate could be used to initialize a date picker or display the formatted local date/time

// Set the output to "1.9.2018 18:01:36.386 GMT+02:00 (CEST)"
const pattern = "d.M.yyyy HH:mm:ss.SSS 'GMT' XXX (z)";
const output = format(zonedDate, pattern, { timeZone: 'Europe/Berlin' });
console.log(output);

console.log("Node version:", process.version)
console.log("Os:", os.version() + " - " + os.release())

我看到的输出是:

1.9.2018 18:01:36.386 GMT +02:00 (GMT+2)
Node version: v14.15.5
Os: Windows 10 Pro - 10.0.19041

这是在 Windows 机器上。

软件包版本有:

"date-fns": "^2.21.3",
"date-fns-tz": "^1.1.4"

在 Ubuntu (replit.com) 上尝试,我看到以下内容:

1.9.2018 18:01:36.386 GMT +02:00 (GMT+2)
Node version: v12.22.1
Os: #45-Ubuntu SMP Tue Apr 13 01:44:53 UTC 2021 - 5.4.0-1042-gcp

3
投票

是我没有检查导入声明的错。一定是这样

import { format } from 'date-fns-tz';

我用过这个:

import { format } from 'date-fns';

在 vscode 上使用自动导入时有点混乱。


0
投票

2025

https://github.com/marnusw/date-fns-tz/releases/tag/v3.0.0 开始,

zonedTimeToUtc
已重命名为
toZonedTime

const zonedParsedDate = toZonedTime(parsedDate, "America/New_York");
© www.soinside.com 2019 - 2024. All rights reserved.