2015-08-21 9 views
5

Questa funzione converte il tempo di 12 ore formato, crediti per un collaboratore su Stack Overflow per questa funzione:Come si passa il valore di un tempo di tipo di input a un oggetto Date?

JS

function ampm(date) { 
    var hours = date.getHours(); 
    var minutes = date.getMinutes(); 
    var ampm = hours >= 12 ? 'pm' : 'am'; 
    hours = hours % 12; 
    hours = hours ? hours : 12; // 0 should be 12 
    minutes = minutes < 10 ? '0'+minutes : minutes; // if minutes less than 10, add a 0 in front of it ie: 6:6 -> 6:06 
    var strTime = hours + ':' + minutes + ' ' + ampm; 
    document.getElementById('time').value = strTime; 
    return strTime; 
} 

////This is how the value of the time input is supposed to be displayed in 12 hr format 
_("display_time").innerHTML = ampm(new Date()); 

HTML

<!--This is the input field where a user selects a time--> 
<input id="time" placeholder="Time" type="time" name="time" /> 




<!--This is where the value of the time input is supposed to be displayed in 12 hr format-->> 
<span id="display_time"></span> 

mia domanda è come fare Ricevo il valore del campo di immissione del tempo da visualizzare sul tag span in formato 12 ore. Questo codice è semi-funzionante.

Visualizza l'ora nel formato 12 ore ma visualizza solo l'ora corrente. Il diagramma di flusso sarebbe qualcosa di simile, l'utente seleziona l'input temporale nel tempo -> qualche JS per convertire in formato 12 ore -> visualizza come formato 12 ore nel tag span. Qualche consiglio o suggerimento?

+0

Per essere onesti, sembrerebbe come si sta complicando la vita. Ci sono un sacco di domande StackOverflow riguardanti gli oggetti di data e ora che propongono soluzioni più semplici. Devi solo cercare un po '. – rottenoats

+0

Come pensate di consentire all'utente di "selezionare l'input in tempo"? Che formato è quel tempo (stringa? Ora? Timestamp?) –

+0

Vedere questo http://stackoverflow.com/questions/4904667/html-how-do-i-insert-dynamic-date-in-webpage – aSoler

risposta

1

Non c'è alcuna necessità di utilizzare Date ei suoi metodi l'ingresso è un String quindi è meglio utilizzare .split(":") metodo e si otterrà direttamente i valori hours e minutes.

Poi basta testare se i loro valori sono inferiori a 10 aggiungere un leader 0 e se il hours è superiore 12 uso pm suffisso o utilizzare am altrimenti.

Questa è una dimostrazione dal vivo utilizzando onchange evento dell'ingresso tempo con il suo valore come parametro di onchange="ampm(this.value):

function ampm(time) { 
 

 
    console.log(time); 
 
    if (time.value !== "") { 
 
    var hours = time.split(":")[0]; 
 
    var minutes = time.split(":")[1]; 
 
    var suffix = hours >= 12 ? "pm" : "am"; 
 
    hours = hours % 12 || 12; 
 
    hours = hours < 10 ? "0" + hours : hours; 
 

 
    var displayTime = hours + ":" + minutes + " " + suffix; 
 
    document.getElementById("display_time").innerHTML = displayTime; 
 
    } 
 
}
<!--This is the input field where a user selects a time--> 
 
<input id="time" placeholder="Time" type="time" name="time" onchange="ampm(this.value)" /> 
 
<span id="display_time"></span>

+0

Che cosa significa" 0 "in var hours = time.split (": ") [0]? Lo stesso con il '1' in var minuti? –

+0

@ArvinFlores questi sono indici, perché split dà un array come risultato, quindi con '[0]' otteniamo il primo elemento e '[1]' otteniamo il secondo elemento. –

+1

Ok. Nel suffisso var, non dovrebbe essere> = 12 invece di solo> 12? Dal momento che andrà dalle 11:59 alle 12:00 invece delle 12:00? –

1

Il valore inserito sarà una stringa, non una data. Ho impostato uno jsfiddle in cui ho modificato il tuo javascript per lavorare su una stringa.

$('#time').on('change', function() { 
    var date = $('#time').val().split(':'); 

    var hours = date[0]; 
    var minutes = date[1]; 

    $('#display_time').text(ampm(hours, minutes)); 
}); 

function ampm(hours, minutes) { 
    var ampm = hours >= 12 ? 'pm' : 'am'; 
    hours = hours % 12 || 12; 
    minutes = minutes || 0; 
    minutes = minutes < 10 ? '0'+minutes : minutes; 
    return hours + ':' + minutes + ' ' + ampm; 
} 
1

Qualcosa di simile lo farà

function showTime() { 
    //Grab the time and split into hrs and mins 
    var time = document.getElementById("time"); 
    if (time.value === "") { 
     document.getElementById("mySpan").innerHTML = ""; 
     return false; 
    } 
    var hrs = time.value.split(":")[0]; 
    var mins = time.value.split(":")[1]; 
    var newTime = ampm(hrs, mins); 
    document.getElementById("mySpan").innerHTML = newTime; 
} 

function ampm(hrs, mins) { 
    return (hrs % 12 || 12) + ":" + mins + ((hrs >= 12) ? "PM" : "AM"); 
} 

Here è un esempio. showTime() deve solo essere eseguito su cambio dell'ora immessa.

+0

@RobG che sarebbe lavoro eccetto hai ancora bisogno di una dichiarazione separata per 12 come quando è maggiore di 12 dobbiamo rimuovere 12 per rappresentare un orologio di 12 ore –

+0

@RobG Ho fatto una modifica. È un po 'più elegante, grazie –

+1

'(funzione (h, m) {return (h% 12 || 12) +': '+ m + (h <12?' Am ':' pm ')}. [], '13: 08'.split (': '))) ' – RobG