Il valore che si vede (Sab 12 Aprile 07:09:21 GMT + 00: 09 1902) è la data equivalente in JavaScript tempo standard che è 20000 ore più tardi la data rif.
si dovrebbe rimuovere semplicemente il valore di riferimento foglio di calcolo dal vostro risultato per ottenere quello che vuoi.
Questo codice fa il trucco:
function getHours(){
var sh = SpreadsheetApp.getActiveSpreadsheet();
var cellValue = sh.getRange('E1').getValue();
var eqDate = new Date(cellValue);// this is the date object corresponding to your cell value in JS standard
Logger.log('Cell Date in JS format '+eqDate)
Logger.log('ref date in JS '+new Date(0,0,0,0,0,0));
var testOnZero = eqDate.getTime();Logger.log('Use this with a cell value = 0 to check the value to use in the next line of code '+testOnZero);
var hours = (eqDate.getTime()+ 2.2091616E12)/3600000 ; // getTime retrieves the value in milliseconds, 2.2091616E12 is the difference between javascript ref and spreadsheet ref.
Logger.log('Value in hours with offset correction : '+hours); // show result in hours (obtained by dividing by 3600000)
}
nota: questo codice ottiene solo poche ore, se la vostra intenzione di avere minuti e/o secondi allora dovrebbe essere sviluppato per gestire anche questo. .. fateci sapere se ne avete bisogno.
EDIT: una parola di spiegazione ...
Fogli di utilizzare una data di riferimento del 12/30/1899, mentre Javascript sta usando 01/01/1970, che significa che v'è una differenza di 25568 giorni tra entrambi i riferimenti. Tutto ciò presupponendo di utilizzare lo stesso fuso orario in entrambi i sistemi. Quando convertiamo un valore di data in un foglio di calcolo in un oggetto data javascript, il motore GAS aggiunge automaticamente la differenza per mantenere la coerenza tra le date.
In questo caso non vogliamo conoscere la data reale di qualcosa ma piuttosto un valore di ore assolute, cioè una "durata", quindi dobbiamo rimuovere lo sfasamento di 25568 giorni. Questo viene fatto usando il metodo getTime()
che restituisce i millisecondi contati dalla data di riferimento JS, l'unica cosa che dobbiamo sapere è il valore in millisecondi della data di riferimento del foglio elettronico e sottrarre questo valore dall'oggetto data reale. Quindi un po 'di matematica per ottenere ore invece di millisecondi e abbiamo finito.
So che questo sembra un po 'complicato e non sono sicuro che il mio tentativo di spiegare chiarirà davvero la domanda, ma vale sempre la pena provare, vero?
Ad ogni modo il risultato è quello di cui avevamo bisogno fino a quando (come indicato nei commenti) si regola il valore di offset in base alle impostazioni del fuso orario del foglio di calcolo. Ovviamente sarebbe possibile lasciare che lo script gestisse automaticamente, ma avrebbe reso lo script più complesso, non sicuro che fosse davvero necessario.
Usando questo per un documento di testo di Google Documenti, ottengo "non definito" – Ralf
Domanda e risposta riguarda specificamente i fogli. – llaaalu
Grazie, sì, ho bisogno di recuperare in modo specifico orari e date dai fogli in documenti. Visualizza valori, non incasinato da fusi orari o altro. Ora ho lavorato attorno ad esso impostando fusi orari in tutti i file e gli script relativi a "GMT (senza l'ora legale)". – Ralf