1

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

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

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'的偏移属性设置为0来使其工作。但这对我来说感觉不太正确。我更喜欢看起来不像黑客的解决方案。

4

2 回答 2

2

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

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

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

于 2019-01-14T11:51:16.230 回答
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});
于 2019-01-14T11:43:23.797 回答