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

时间:2016-10-18 04:26:25

标签: javascript momentjs

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

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

console.log((EstTzOffset - currentTz));

1 个答案:

答案 0 :(得分:0)

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

这一点非常重要,因为观看您的活动的人可能会在EST之间变为DST。现在" (您在上面使用的)和活动当天下午6点。

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

library(caret)

confusionMatrix(CV_lda$preds, CV_lda$real)
#output
Confusion Matrix and Statistics

            Reference
Prediction   setosa versicolor virginica
  setosa         50          0         0
  versicolor      0         48         1
  virginica       0          2        49

Overall Statistics

               Accuracy : 0.98            
                 95% CI : (0.9427, 0.9959)
    No Information Rate : 0.3333          
    P-Value [Acc > NIR] : < 2.2e-16       

                  Kappa : 0.97            
 Mcnemar's Test P-Value : NA              

Statistics by Class:

                     Class: setosa Class: versicolor Class: virginica
Sensitivity                 1.0000            0.9600           0.9800
Specificity                 1.0000            0.9900           0.9800
Pos Pred Value              1.0000            0.9796           0.9608
Neg Pred Value              1.0000            0.9802           0.9899
Prevalence                  0.3333            0.3333           0.3333
Detection Rate              0.3333            0.3200           0.3267
Detection Prevalence        0.3333            0.3267           0.3400
Balanced Accuracy           1.0000            0.9750           0.9800

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

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');

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

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');

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