时差不使用时区,而是用户计算机时间

时间:2019-01-14 11:31:44

标签: javascript angularjs momentjs moment-timezone

我正在尝试显示某项的持续时间行情记录。伦敦时间开始时间为始终。它非常适合英格兰/相同时区的人,但是当其他时区的人看持续时间时,它会显示错误的值(如果您位于英格兰后的时区=>负值/值太小,则时区= >值太大)。

我对此的解决方案是使用moment-timezone。我已尝试使用此时区数据正确添加了时区数据(简化了代码并将其分成几行,以便于阅读)

let londonTimeNow = moment().tz('Europe/London'),
jobStartTime = moment(job.start, 'DD/MM/YYYY HH:mm:ss'),
diff = londonTimeNow.diff(jobStartTime);
duration = moment.duration(diff).format('HH:mm:ss', {trim: false});

我希望无论您在世界的哪个地方,都能得到伦敦的当前时间并与开始时间进行比较。但是,似乎diff函数将时间转换为用户的计算机时间。我尝试将londonTimeNow格式化为字符串,但是diff函数不起作用。 请注意,我已经调试并且moment().tz()正常工作,并且尝试了其他时区,并且它在指定的时区中获得了正确的时间。

有什么想法吗?

编辑: 似乎可以通过手动将'londonTimeNow'的offset属性设置为0来使其工作。但是,这对我来说并不完全正确。我希望使用一种看起来不太像黑客的解决方案。

2 个答案:

答案 0 :(得分:2)

您应该以与在相同时区声明伦敦时间相同的方式指定作业开始时间:

jobStartTime = moment.tz(jobStart, 'DD/MM/YYYY HH:mm:ss','Europe/London'),

这将使用相同的时区设置作业开始时间。

答案 1 :(得分:1)

您可以添加期望的输出还是指定“差异转换时间”的含义? diff的结果是持续时间,没有任何时区。

除此之外,问题似乎出在未使用时区进行任务启动。 试试这个:

let londonTimeNow = moment().tz('Europe/London'),
jobStartTime = moment(job.start, 'DD/MM/YYYY HH:mm:ss').tz('Europe/London'),
diff = londonTimeNow.diff(jobStartTime);
duration = moment.duration(diff).format('HH:mm:ss', {trim: false});