JavaScript 秒数到格式为 hh:mm:ss 的时间字符串
我想将持续时间(即秒数)转换为冒号分隔的时间字符串 (hh:mm:ss)
我在这里找到了一些有用的答案,但他们都谈到转换为 x 小时和 x 分钟格式。
那么是否有一个小片段可以在 jQuery 或原始 JavaScript 中执行此操作?
I want to convert a duration of time, i.e., number of seconds to colon-separated time string (hh:mm:ss)
I found some useful answers here but they all talk about converting to x hours and x minutes format.
So is there a tiny snippet that does this in jQuery or just raw JavaScript?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(30)
您可以借助 JS Date 方法在没有任何外部 JS 库的情况下做到这一点,如下所示:
You can manage to do this without any external JS library with the help of JS Date method like following:
要获取格式为
hh:MM:ss
的时间部分,您可以使用以下正则表达式:(上面有人在同一篇文章中提到过这一点,谢谢。)
To get the time part in the format
hh:MM:ss
, you can use this regular expression:(This was mentioned above in same post by someone, thanks for that.)
我推荐普通的 javascript,使用 Date 对象。 (对于更短的解决方案,使用
toTimeString
,请参阅第二个代码片段。)(当然,创建的 Date 对象将具有与其关联的实际日期,但该数据是无关的,因此出于这些目的,您不必担心它。)
编辑(简短的解决方案):
利用
toTimeString
函数并在空格上拆分:toTimeString
给出'16:54:58 GMT-0800 (PST)'
,并在第一个空格上拆分给出'16:54:58'
。I recommend ordinary javascript, using the Date object. (For a shorter solution, using
toTimeString
, see the second code snippet.)(Of course, the Date object created will have an actual date associated with it, but that data is extraneous, so for these purposes, you don't have to worry about it.)
Edit (short solution):
Make use of the
toTimeString
function and split on the whitespace:toTimeString
gives'16:54:58 GMT-0800 (PST)'
, and splitting on the first whitespace gives'16:54:58'
.这是我的看法:
预期结果:
Here's my take on it:
Expected results:
Google 搜索出现了此结果:
A Google search turned up this result:
主题的变化。处理个位数秒的方式略有不同
Variation on a theme. Handles single digit seconds a little differently
使用令人惊叹的 moment.js 库:
这允许您指定任何持续时间,无论是小时、分钟、秒、米尔还是返回人类可读的版本。
Using the amazing moment.js library:
This allows you to specify any duration be it hours, minutes, seconds, mills, and returns a human readable version.
我喜欢第一个答案。
有一些优化:
源数据是一个数字。不需要额外的计算。
超额计算
结果代码:
I like the first answer.
There some optimisations:
source data is a Number. additional calculations is not needed.
much excess computing
Result code:
以下是使用
Date 的示例。原型.toLocaleTimeString()
。我选择 GB 作为语言,因为美国在初始小时显示24
而不是00
。此外,我选择Etc/UTC
作为时区,因为UTC
在 tz 数据库时区列表。这是相同的示例,但使用
Intl.DateTimeFormat
。此变体允许您实例化可重用的格式化程序对象,该对象的性能更高。Here is an example of using
Date.prototype.toLocaleTimeString()
. I chose GB as the language, because the US shows a24
instead of a00
for the initial hour. Furthermore, I choseEtc/UTC
as the time zone, becauseUTC
is aliased to it in the list of tz database time zones.Here is the same example, but with
Intl.DateTimeFormat
. This variant lets you instantiate a reusable formatter object, which is more performant.这很容易,
It's pretty easy,
new Date().toString().split(" ")[4];
结果
15:08:03
new Date().toString().split(" ")[4];
result
15:08:03
最简单的方法。
Easiest way to do it.
结果:
result:
我最喜欢 Webjins 的答案,所以我将其扩展为显示带有广告后缀的日期,使显示有条件并作为后缀包含在纯秒上:
返回“3d 16:32:12”或“16:32:12”或“32: 12 英寸或“12 秒”
I liked Webjins answer the most, so i extended it to display days with a d suffix, made display conditional and included a s suffix on plain seconds:
returns "3d 16:32:12" or "16:32:12" or "32:12" or "12s"
我喜欢 Powtac 的答案,但我想在 angular.js 中使用它,所以我使用他的代码创建了一个过滤器。
它在功能上是相同的,只是我添加了一个可选的小数字段来显示秒的小数部分。像使用任何其他过滤器一样使用它:
{{ elapsedTime | HHMMSS }}
显示:01:23:45
{{ elapsedTime | HHMMSS }}
显示:01:23:45
{{ elapsedTime | HHMMSS HHMMSS : 3 }}
显示:01:23:45.678
I loved Powtac's answer, but I wanted to use it in angular.js, so I created a filter using his code.
It's functionally identical, except that I added in an optional decimals field to display fractional seconds. Use it like you would any other filter:
{{ elapsedTime | HHMMSS }}
displays:01:23:45
{{ elapsedTime | HHMMSS : 3 }}
displays:01:23:45.678
对此最常见的答案是
一些示例输出:
请参阅 https://stackoverflow.com/a/66504936/1310733
The most general answer to this is
Some example outputs:
See explanation at https://stackoverflow.com/a/66504936/1310733
这是另一个版本,它也处理天数:
Here is yet another version, which handles days also:
示例
Examples
您现在可以像这样使用它:
工作片段:
You can use it now like:
Working snippet:
我认为就性能而言,这是迄今为止最快的:
I think performance wise this is by far the fastest:
我是这样做的。它似乎工作得相当好,而且非常紧凑。 (不过,它使用了很多三元运算符)
......以及格式化字符串......
Here's how I did it. It seems to work fairly well, and it's extremely compact. (It uses a lot of ternary operators, though)
...and for formatting strings...
您可以使用以下函数将时间(以秒为单位)转换为
HH:MM:SS
格式:在不传递分隔符的情况下,它使用
:
作为(默认)分隔符:如果想使用
-
作为分隔符,只需将其作为第二个参数传递即可:Demo
另请参阅此小提琴。
You can use the following function to convert time (in seconds) to
HH:MM:SS
format :Without passing a separator, it uses
:
as the (default) separator :If you want to use
-
as a separator, just pass it as the second parameter:Demo
See also this Fiddle.
块上的字符串有一种新方法:padStart
这是一个示例用例:4 行 JavaScript 中的 YouTube 时长
There's a new method for strings on the block: padStart
Here is a sample use case: YouTube durations in 4 lines of JavaScript
可以使用正则表达式来匹配 Date 对象的 toString() 方法返回的字符串中的时间子字符串,其格式如下:“Thu Jul 05 2012 02:45:12 GMT +0100(GMT 夏令时)”。请注意,此解决方案使用自纪元以来的时间:1970 年 1 月 1 日午夜。此解决方案可以是单行代码,但将其分开可以更容易理解。
A regular expression can be used to match the time substring in the string returned from the
toString()
method of the Date object, which is formatted as follows: "Thu Jul 05 2012 02:45:12 GMT+0100 (GMT Daylight Time)". Note that this solution uses the time since the epoch: midnight of January 1, 1970. This solution can be a one-liner, though splitting it up makes it much easier to understand.这是一个相当简单的解决方案,四舍五入到最接近的秒!
Here is a fairly simple solution that rounds to the nearest second!
这是我最近为 MM:SS 写的一篇文章。这并不完全符合问题,但它是一种不同的单行格式。
编辑:这是为了多样性而添加的,但这里最好的解决方案是 https://stackoverflow.com/a/25279399/639679 下面。
This is one I wrote recently for MM:SS. It's not exact to the question, but it's a different one-liner format.
Edit: This was added for variety, but the best solution here is https://stackoverflow.com/a/25279399/639679 below.
这就是我的做法
timeFromSecs(22341938) 将返回 '258d 14h 5m 38s'
This is how i did it
timeFromSecs(22341938) will return '258d 14h 5m 38s'
我个人更喜欢不带前导零的前导单位(天、小时、分钟)。但秒应该始终以分钟开头(0:13),这种表示很容易被认为是“持续时间”,无需进一步解释(标记为分钟、秒等),可用于各种语言(国际化)。
//模仿服务器端(.net、C#)持续时间格式,例如:
I'm personally prefer the leading unit (days, hours, minutes) without leading zeros. But seconds should always be leaded by minutes (0:13), this presentation is easily considered as 'duration', without further explanation (marking as min, sec(s), etc.), usable in various languages (internationalization).
//imitating the server side (.net, C#) duration formatting like:
您现在可以像这样使用它:
工作片段:
You can use it now like:
Working snippet: