Pregunta sobre Developing with WordPress de Wordpress:

formato establecido en HH: MM: SS en código jQuery que obtiene la duración del archivo mp3

Un usuario preguntó 👇

Tengo un código jQuery que obtiene la duración de los archivos MP3 y estoy tratando de encontrar una manera de generar la hora en HH: MM: SS. A partir de ahora, si un archivo mp3 es de 5 minutos y 32 segundos, lo muestra como 5:32 y quiero que sea 00:05:32. Si es 1 hora, 15 minutos y 32 segundos, lo muestra como 1:15:32 y lo quiero como 1:15:32.

Código:

function analyize_mp3_add_meta_box() {
	add_meta_box(
		'analyize_mp3-analyize-mp3',
		__( 'Analyize MP3', 'analyize_mp3' ),
		'analyize_mp3_html',
		'post',
		'normal',
		'default'
	);
}
add_action( 'add_meta_boxes', 'analyize_mp3_add_meta_box' );
function analyize_mp3_html( $post) {
wp_nonce_field( '_analyize_mp3_nonce', 'analyize_mp3_nonce' ); ?>
<style type="text/css">
    audio {display: none;}
</style>
<script type='text/javascript'>//<![CDATA[
    jQuery(function(){
    var objectUrl;
    jQuery("#audio").on("canplaythrough", function(e){
        var seconds = e.currentTarget.duration;
        var duration = moment.duration(seconds, "seconds");
        var time = "";
        var hours = duration.hours();
        if (hours > 0) { time = hours + ":" ; }
        time = time + duration.minutes() + ":" + duration.seconds();
        jQuery("#duration").text(time);
        jQuery('#timelength').val(time);
        URL.revokeObjectURL(objectUrl);
    });
    jQuery("#file").change(function(e){
        var file = e.currentTarget.files[0];
        jQuery("#filesize").text(file.size);
        jQuery('#size').val(file.size);
        objectUrl = URL.createObjectURL(file);
        jQuery("#audio").prop("src", objectUrl);
    });
    });//]]> 
</script>    
<input type="file" id="file" />    
<audio id="audio"></audio>    
<p>
    <label>File Size:</label>
    <span id="filesize"></span>
    <input type="hidden" id="size" name="size" value=""/>
</p>    
<p>
    <label>Song Duration:</label>
    <span id="duration"></span>
    <input type="hidden" id="timelength" name="time" value=""/>
</p>        
<?php }

Exposición de obra: https://jsfiddle.net/openbayou/3kw27va0/7/

Lo intenté time = time + duration.hours() + ":" + time + duration.minutes() + ":" + duration.seconds(); y eliminado if (hours > 0) { time = hours + ":" ; } y con los ejemplos anteriores, se muestra como 1:15:32 (tratando de obtener 01:15:32) y 5:32 como 0: 5:32 (tratando de obtener 00:05:32)

Este tema fue modificado hace 2 años, 9 meses por.

(@bcworkz)

Hace 2 años, 9 meses

Primero debe dividir la longitud en componentes:

var hr  = Math.floor(seconds / 3600);
var min = Math.floor((seconds - (hr * 3600))/60);
var sec = Math.floor(seconds - (hr * 3600) - (min * 60));

Luego convierta cada elemento en una cadena y si la longitud es 1, agregue 0. inicio. Puede definir una función para hacer esto con cualquier elemento.

leadingZero: function(val){
  var str = val.toString();
  if(str.length == 1) {
    str = ‘0’ + str;
  }
  return str;
}

Luego ensambla elementos en una cadena de tiempo completo
var time = leadingZero(hr) + ':' + leadingZero(min) + ':' + leadingZero(sec);

(@openbayou)

Hace 2 años, 9 meses

Lo anterior no ha funcionado, pero he avanzado un poco. Tengo las horas fijadas pero tengo problemas con los minutos.

if (hours < 10) {time = "0" + hours + ":"} else {time = hours + ":"}

Esto es lo que he hecho hasta ahora:

var hours = duration.hours();
var mins = duration.minutes();
if (hours < 10) {time = "0" + hours + ":"} else {time = hours + ":"}
time = time + if (mins < 10) {"0" + mins + ":"} else {mins + ":"} + ":" + duration.seconds();

Gracias de nuevo por la ayuda.

(@openbayou)

Hace 2 años, 9 meses

Fijo

var hours = duration.hours();
var mins = duration.minutes();
var secs = duration.seconds();
if (hours < 10) { time_hour = "0" + hours + ":" ; } else { time_hour = hours + ":" ;};
if (mins < 10) { time_mins = "0" + mins + ":" ; } else { time_mins = mins + ":" ;};
if (secs < 10) { time_secs = "0" + secs} else { time_secs = secs};
jQuery("#duration").text(time_hour+time_mins+time_secs);

(@bcworkz)

Hace 2 años, 9 meses

¡Agradable! Solo noté un error de sintaxis en mi función LeadZero. Agregar comillas incorrectas en la línea principal debe ser cero str = '0' + str; Perdón por la confusión que ha creado.

¿Solucionó tu problema??

0 / 0

Deja una respuesta 0

Tu dirección de correo electrónico no será publicada.