使用时刻和时刻 - 时区计算事件发生前的剩余秒数

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

我正在创建一个事件的倒计时,服务器给我这个事件留下的秒数。它在美国/纽约的同一时区工作正常,但我不知道如何在不同的时区实现这一目标。我想我必须根据用户的时区添加/减去几秒钟。我考虑到服务器返回的秒数总是在EST中。有人可以提供建议吗?到目前为止,我有这个,但我收到一个错误:

let serverZoneTime = new moment().tz.zone("America/New_York").offset(now); 
let currentZoneTime = moment.tz.guess().offset(now);

console.log((EstTzOffset - currentTz));
javascript momentjs
1个回答
0
投票

首先,如果这是某一天下午6点的事件,我会得到该事件开始时间的确切时间戳或UTC时间。下面我使用的是假时间戳。

这很重要,因为观看您的活动的人可以在“现在”(您在上面使用)和活动当天下午6点之间从EST变为DST。

听起来你已经有了倒计时工作,但这只是你正在处理的时区问题,所以我将跳过倒计时逻辑。

const moment = require('moment-timezone');

// Get User's Timezone
const userTimezone = moment.tz.guess(); // this has to be on the client not server
const serverTimezone = "America/New_York";

// Get the exact timestamp of the event date apply the server timezone to it.
const serverEventTime = moment(34534534534, 'x').tz(serverTimezone);

// Take the server time and convert it to the users time
const userEventTime = serverEventTime.clone().tz(userTimezone);

// From here you can format the time however you want
const formattedUserEventTime = userEventTime.format('YYYY-MM-DD HH:mm:ss'); 
// Or format to a timestamp
const userEventTimestamp = userEventTime.format('x');

对于倒计时,你现在也想要时间,这遵循与上面相同的逻辑:

const serverTimeNow = moment().tz(serverTimezone);
const userTimeNow = serverTimeNow.clone().tz(userTimezone); 

// Get timestamp so we can do easier math with the time
const userNowTimestamp = userTimeNow.format('x');

现在我们所要做的就是从事件时间中减去现在的时间来获得差异,然后使用setInterval()重复每秒。

const millisecondsToEvent = userEventTimestamp - userNowtimestamp;
const secondsToEvent = millisecondsToEvent / 1000;

希望这对某人有用(只是意识到这已经有两年了)。

© www.soinside.com 2019 - 2024. All rights reserved.