2015-05-11 2 views
5

Vorrei impostare il valore di un ingresso datetime-local con la data e l'ora correnti. In questo momento ho una brutta soluzione che comporta l'affettatura dei primi 17 caratteri. Inoltre, imposta l'ora in GMT anziché l'ora locale. Il mio codice è il seguente:Impostazione valore data/ora locale dalla data

<input type="datetime-local" name="name" id="1234"> 

<script type="text/javascript"> 
    var d = new Date(); 
    var elem = document.getElementById("1234"); 
    elem.value = d.toISOString().slice(0,16); 
</script> 

Ho due problemi con questo codice:

  1. C'è un modo per convertire da un Date ad un valore legale, senza affettare manualmente la stringa?
  2. Vorrei che la stringa venisse visualizzata in datetime-local come DD/MM/YYYY, hh:mm (ad esempio 05/11/2015, 14:10 è 13:10 in GMT ma sono in GMT + 1 quindi voglio visualizzare 14:10). Quello che viene visualizzato al momento è 05/11/2015, 01:10 PM. Vorrei rimuovere il PM e visualizzarlo in ora locale.

Questo potrebbe essere un XY problem, quindi se lo faccio completamente sbagliato e non c'è un modo migliore per visualizzare le raccoglitrici datetime in html, sarei felice di sentire.

risposta

1

La funzione toISOString è responsabile della conversione della data locale (new Date) in GMT.

Se non si desidera utilizzare GMT poi affettare, è necessario utilizzare la Data di puro costruttore e tutte le funzioni GetX, dove X è (giorni, mesi, anni ...)

Inoltre , è necessario estendere l'oggetto Number con una funzione che ti aiuterà a restituire 01 invece di 1 ad esempio, per preservare il formato dd/mm/yyyy, hh/mm.

Fammi chiamare questa funzione prototipo AddZero

 <input type="datetime-local" name="name" id="1234"> 

    <script type="text/javascript"> 
     Number.prototype.AddZero= function(b,c){ 
     var l= (String(b|| 10).length - String(this).length)+1; 
     return l> 0? new Array(l).join(c|| '0')+this : this; 
    }//to add zero to less than 10, 


     var d = new Date(), 
     localDateTime= [(d.getMonth()+1).AddZero(), 
       d.getDate().AddZero(), 
       d.getFullYear()].join('/') +', ' + 
       [d.getHours().AddZero(), 
       d.getMinutes().AddZero()].join(':'); 
     var elem=document.getElementById("1234"); 
     elem.value = localDateTime; 
    </script> 

See this

+0

Grazie per la risposta. Stampa l'ora corretta come stringa (05/11/2015, 14:36:30) ma non funziona come valore per un datetime locale –

+0

Sto eseguendo il mio codice su http://www.w3schools.com /htmL/tryit.asp?filename=tryhtml_input_datetime-local. Se copi incolla il tuo codice, vedrai che non viene visualizzato correttamente. –

+0

Fantastico! Cosa intendi per datetime-local? A meno che non mi sbagli, il datetime locale è la data e l'ora del tuo sistema operativo, quando viene installato il browser runing. – Bellash

0

Sostituire questa linea

elem.value = d.toISOString().slice(0,16); 

con

elem.value = d.toLocaleString(); 

Questo w malato stampa ancora "am/pm" alla fine, ma si occupa dell'aggiustamento del tempo ai valori locali.