如何根据时区偏移量减去时间

How to subtract the time based on the timezone offset

我试图寻找答案,但找不到与时区偏移有关的特定答案。因此,如果已经有任何答案,发布同样的内容真的很抱歉。

我在项目中有一个需求,需要根据用户指定的时间和用户提供的时区偏移值,将时间转换为UTCGMT。基本上,用户根据他的本地时间提供他的本地时间和时区偏移值。我需要将其转换为 UTC/GMT 时间。

我正在使用 Node.js,以下是 Node.js 后端中可用的数据:

Time: 2020-11-05T15:00:00.000Z
Timezone offset value: +02:00

由于时区偏移值为+02:00,我需要从时间中减去它以将其转换为UTC格式。所以我可以得到时间:2020-11-05T13:00:00.000Z。我也使用 moment-js。有人可以帮助我如何使用 Node.js 或使用 Moment.js 实现此目的吗?

如果偏移量考虑了夏令时,您应该可以这样做:

const the_date = '2020-11-05T15:00:00.000';
const offset = 2;
const utc_time = moment.utc(the_date).subtract(offset, 'hours');

经过更多的研究和尝试,我能够转换它。在基督徒的回应之外发布答案 () 因此,如果有人正在寻找答案,他们将有另一个选择:

var moment      =   require('moment');
var time        =   "2020-11-05T15:00:00.000Z";
var timeoffset  =   "+02:00";
    time        =   moment.utc(time).local().format('YYYY-MM-DDTHH:mm:SS.000');
    time        =   moment(time, 'YYYY-MM-DDTHH:mm:ss.000').subtract(timeoffset).format('YYYY-MM-DDTHH:mm:ss.000') + 'Z';

不清楚您尝试转换的方式。如果要从 UTC 转换为固定偏移量,则可以使用 utcOffset 函数,如下所示:

const m = moment.utc('2020-11-05T15:00:00.000Z').utcOffset('+02:00');
m.format();  //=> "2020-11-05T17:00:00+02:00"

或者 - 如果您尝试将 +02:00 转换,那么您将在输入中包含该偏移量而不是 Z (Z 表示 UTC ).然后您只需调用 utc 函数,如下所示:

const m = moment('2020-11-05T15:00:00.000+02:00').utc();
m.format();  //=> "2020-11-05T13:00:00Z"

但是您应该知道偏移量与时区不同。一个时区可以有多个偏移量,其中一个将适用于给定的时间点。由于夏令时和标准时间的变化,这些偏移量可能会发生变化。因此,要求用户根据他的当地时间选择“他的时区偏移值”是有问题的——因为您可能将该偏移量应用于错误的时间点。有关详细信息,请参阅 timezone tag wiki 中的“时区 != 偏移量”。

你也应该了解 Moment's project status,并可能选择不同的库。