Javascript 瞬间时差赢得';不要使用瞬间时区,而是使用计算机时间

Javascript 瞬间时差赢得';不要使用瞬间时区,而是使用计算机时间,javascript,angularjs,momentjs,moment-timezone,Javascript,Angularjs,Momentjs,Moment Timezone,我正在尝试显示某个内容的持续时间代码。开始时间始终为伦敦时间。它适用于英格兰/同一时区的人,但是当其他时区的人查看持续时间时,它会显示错误的值(如果您位于英格兰后面的时区=>负值/值太小,则前面的时区=>值太大) 我的解决方案是使用时刻时区。我添加了正确的时区数据,我尝试使用此时区数据(代码简化并分隔为单独的行以便于阅读): 我希望这将得到伦敦的当前时间,并与世界上任何地方的开始时间进行比较。但是,diff函数似乎将时间转换为用户的计算机时间。我尝试将londonTimeNow格式化为字符串,但

我正在尝试显示某个内容的持续时间代码。开始时间始终为伦敦时间。它适用于英格兰/同一时区的人,但是当其他时区的人查看持续时间时,它会显示错误的值(如果您位于英格兰后面的时区=>负值/值太小,则前面的时区=>值太大)

我的解决方案是使用时刻时区。我添加了正确的时区数据,我尝试使用此时区数据(代码简化并分隔为单独的行以便于阅读):

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

有什么想法吗

编辑:
似乎我可以通过手动将'londonTimeNow'的offset属性设置为0来让它工作。然而,我觉得这不太对。我更喜欢一个不太像黑客的解决方案。

您能添加预期的输出或指定您所说的“diff转换时间”是什么意思吗? 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});

指定作业开始时间的方式应与使用相同时区声明伦敦时间的方式相同:

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

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

通过“转换时间”,我的意思是,尽管将我想要的
londonTimeNow
指定为伦敦时间(该变量确实获取伦敦时间,即使对于美国用户也是如此),但diff函数似乎注意到时间与计算机本地时间有偏移,然后把这个因素考虑进去。因此,结果是本地时间和startTimeString(始终为伦敦时间)之间的差值,给出了不正确的持续时间值。另外,谢谢,我认为您将
jobStartTime
设置为也有一个时区是正确的。它似乎有效,我只是想在确定之前进行更彻底的测试。谢谢,我会继续测试,但这似乎有效。
jobStartTime = moment.tz(jobStart, 'DD/MM/YYYY HH:mm:ss','Europe/London'),