在多个元素上用时间格式替换秒

Replace seconds with time format on multiple elements

提问人:mrmoon97 提问时间:3/8/2023 更新时间:3/9/2023 访问量:53

问:

我有点挣扎。

我有多个元素包含以秒为单位的时间。

<p><time class="replace_time">3.232151</time></p>
<p><time class="replace_time">5.234151</time></p>
...
jQuery(".replace_time").text(function(){
        
    var d = jQuery(this).text();
    
    var h = Math.floor(d / 3600);
    var m = Math.floor(d % 3600 / 60);
    var s = Math.floor(d % 3600 % 60);

    if (h > 0) {       
        return (("0" + h).slice(-2) + ":" + ("0" + m).slice(-2) + ":" + ("0" + s).slice(-2));     
    }
        
    else {    
        return ("0" + m).slice(-2) + ":" + ("0" + s).slice(-2); 
    };
    
});  
  

它基本上是有效的,但不幸的是,仅适用于 DOM 顺序🤔中的最后一个 (??) 项目 我忽略了什么?

JavaScript jQuery 日期时间

评论

0赞 RobG 3/9/2023
你一定想知道为什么jQuery被用于这样的事情,因为el.textContent返回或替换元素的文本内容,而不创建多个额外的jQuery对象(或任何对象)。document.querySelectorAll(".replace_time").forEach(el => ...)

答:

1赞 ErnestasL 3/8/2023 #1

我认为您应该使用 .each 函数来获取每个元素

jQuery(".replace_time").each(function(){
    
    var d = jQuery(this).text();

    var h = Math.floor(d / 3600);
    var m = Math.floor(d % 3600 / 60);
    var s = Math.floor(d % 3600 % 60);

    if (h > 0) {       
        jQuery(this).text(("0" + h).slice(-2) + ":" + ("0" + m).slice(-2) + ":" + ("0" + s).slice(-2));     
    }
    
    else {    
        jQuery(this).text(("0" + m).slice(-2) + ":" + ("0" + s).slice(-2)); 
    };

});  

评论

0赞 mrmoon97 3/8/2023
不幸的是,这不能再取代任何东西了......🤔
0赞 ErnestasL 3/8/2023
尝试调试一下,我仍然认为潜在的问题是您没有遍历结果并访问每个结果,您是否每次都获得正确的元素作为 d?
1赞 mrmoon97 3/8/2023
是我的一个愚蠢的错误
0赞 RobG 3/9/2023 #2

@ErnestasL得到答案,则需要遍历初始查询返回的数组。

如果拆分时间格式化部分,其余部分非常简单,无需 jQuery 妨碍:

// Format seconds as time HH:mm:ss
function formatTime(secs) {
  let z = n => ('0'+n).slice(-2);
  let h = Math.floor(secs / 3600);
  let m = Math.floor(secs % 3600 / 60);
  let s = Math.floor(secs % 3600 % 60);
  return `${z(h)}:${z(m)}:${z(s)}`;
}

document.querySelectorAll('.replace_time').forEach(
  el => el.textContent = formatTime(el.textContent)
);
  
<p><time class="replace_time">3.232151</time></p>
<p><time class="replace_time">182735.234151</time></p>