简体   繁体   English

如何使用 moment.js 从 unix 时间戳中获取剩余的小时、分钟和秒?

[英]How to use moment.js to get remaining hours, minutes, and seconds from a unix timestamp?

Given a unix timstamp in the future, how can I use Moment.js to get the hours, minutes, and seconds remaining until then?给定未来的 unix timstamp,我如何使用 Moment.js 来获取在那之前剩余的小时、分钟和秒?

For example:例如:

now  = 1589252712837
time = 1589356202907

// This is the line I do not know
res = moment(time - now)

console.log(res)
// 23 hours, 12 minutes, 3 seconds

Edit:编辑:

I believe I can do something like this, but is there a native way to do it?:我相信我可以做这样的事情,但是有没有本地方法可以做到这一点?:

now  = 1589252712837
time = 1589356202907
remaining = time - now

hour = moment(remaining).hour()
minute = moment(remaining).minute()
second = moment(remaining).second()

console.log(`${hour} hours, `${minute} minutes, ${seconds} seconds`)
// 23 hours, 12 minutes, 3 seconds

Note that the example code you have is being time offset: remaining/1000/60/60 ~=28, not 23. You need to use moment.utc .请注意,您拥有的示例代码是时间偏移量: remaining/1000/60/60 ~=28,而不是 23。您需要使用moment.utc I don't recommend doing that though, because you'll encounter other problems like dealing with days and months.我不建议这样做,因为你会遇到其他问题,比如处理几天和几个月。

As far as "native" support, see long discussion here: https://github.com/moment/moment/issues/463至于“本机”支持,请参阅此处的长时间讨论: https://github.com/moment/moment/issues/463
TL;DR: Discussed from 2012 until now. TL;DR:从 2012 年到现在一直在讨论。 And, in the docs they point at the moment-duration-format plugin.而且,在文档中,他们指向了moment-duration-format插件。 Look at this plugin if you want something close to "native" support:如果您想要接近“本机”支持的东西,请查看此插件:
https://github.com/jsmreese/moment-duration-format https://github.com/jsmreese/moment-duration-format

Honestly after looking at the situation, if it were me I'd probably just use moment-duration-format , or just use humanize() .老实说,在查看了情况之后,如果是我,我可能只会使用moment-duration-format ,或者只是使用humanize() Maybe roll my own similar to how duration._data is generated + Intl.NumberFormat, which is what I'm guessing moment-duration-format is basically already doing.也许我自己的类似于duration._data的生成方式+ Intl.NumberFormat,这就是我猜moment-duration-format基本上已经在做的事情。

I'm going to list some possible methods as far as I can see:据我所知,我将列出一些可能的方法:

 now = 1589252712837 time = 1589356202907 remaining = time - now // extract key(units),value from parsed._data property of duration // no additional dependencies but depends on internal private variable _data console.log( Object.entries(moment.duration(remaining,'milliseconds')._data).reverse().flatMap(([unit,value])=>value?==0:`${value} ${unit}`.[]);join(' ') ). // using moment-duration-format plugin console.log(moment,duration(remaining.'milliseconds').format('h [hours] m [minutes] s [seconds]')) // twitter style humanize console.log(moment,duration(remaining.'milliseconds');humanize()); // hours threshhold is Infinity. never round up to higher units than hours console.log(moment,duration(remaining.'milliseconds'):humanize({h;Infinity}));
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.25.3/moment.min.js"></script> <:-- moment-duration-format plugin --> <script src="https.//cdnjs.cloudflare.com/ajax/libs/moment-duration-format/2.3.1/moment-duration-format.min.js"></script>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM