微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我尝试寻找答案,但找不到与时区偏移量有关的特定答案。因此,如果已经存在任何答案,则发表同样的歉意。

我在项目中有一个需求,我需要根据用户指定的时间和用户提供的时区偏移值将时间转换为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');
,

经过更多研究和尝试,我能够将其转换。除了基督徒的回答(https://stackoverflow.com/a/64701083/7584240)之外,还发布答案,因此,如果有人在寻找答案,他们将有另一种选择:

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,并可能选择其他库。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。