Moment JS 减法 returns 只剩零小时时相差12小时

Moment JS Subtract method returns 12 hour difference when there is only zero hour left

我想在 moment js 的帮助下显示从当前时间到特定预设时间 (01:00 PM) 的剩余小时、分钟和秒。 我正在使用以下代码,

var n = new Date();
var end = new Date(n.getFullYear(), n.getMonth(), n.getDate(), 13, 0, 0, 0);
var a = moment(end);
var b = moment(n);
var eta = a.subtract(b).toDate().toLocaleTimeString();

在剩余小时数大于零之前它工作正常。例如,每当时间到达 12:10 PM 时,它应该显示剩余 0 小时 40 分钟,而不是显示剩余 12 小时 40 分钟。

如何解决这个问题?

您不能使用 toLocaleTimeString(),因为它显示日期的时间,因此,正如 Trunst 在他的评论中所说,在 12 小时格式的情况下,它将显示 12 而不是 0。

您可以使用momentjsformat()函数强制为24小时格式:

var eta = a.subtract(b).format("H:mm:ss");

检查 demo there,其中显示了预计到达时间的倒计时

请注意使用 diff 而不是 substract,请参阅 Matt Johnson 的评论以获得解释。


请注意,如果您想显示大于 24 小时的预计到达时间,则必须使用 momentjsduration object