Vorrei definire una funzione personalizzata in Fogli Google. Questa funzione dovrebbe fare qualcosa di molto semplice, ma non sono riuscito a trovare come farlo. Sono molto confuso con tutte le risposte che ho letto perché non riesco a trovare un riferimento chiaro su come gestire le date negli script di Google.
Da quello che ho capito, le manipolazioni di base della data possono essere fatte con:
-
new Date()
: da quello che ho capito, definisce un oggetto che ha alcune proprietà. Non so come usare la data di una cella e convertirla come tale oggetto. -
Utilities.formatDate()
: questo serve per cambiare il formato della data vista come una stringa . - la libreria
Moment
( http://momentjs.com/ )
Alla fine, come posso inserire due date (ad es. 31/01/2016
) e, diciamo, trovare il massimo tra le due ed estrarre il mese della prima uno?
function myfun(date1,date2) { // month = month of date 1 // return maximum(date1,date2); }
Sono anche interessato se qualcuno può spiegare gli schemi per trattare le date o indicare un buon riferimento.
Commenti
- Visualizza il answer di Sergei insas a Come leggere i valori di ora corretti da foglio di lavoro Google
- Grazie. Non cè altro modo? ' sembra incredibilmente complicato estrarre, ad esempio, il mese di una data! Inoltre deve tener conto del fuso orario … che ' è un po contorto per semplici operazioni di data (fissa).
- Ho aggiunto una risposta incentrata su il codice del caso che è stato esposto, ma la questione è due ampi (manipolazione della data). Forse dovresti iniziare cercando snippet di codice JavaScript e corsi online.
- @Rub é n Ho capito. Non volevo fare una " scrivere codice per me ", quindi stavo cercando informazioni generali che non ho trovato. Sergei insas ' Il post che hai indicato è utile.
- Per informazioni generali su JavaScript vedi developer.mozilla. org / en-US / docs / Web / JavaScript e per quanto riguarda Google Apps Script, vedere developers.google.com/apps-script .
Risposta
Recupero e impostazione dei valori datetime
Ogni volta che lo script chiama .getValue()
su una cella formattata come data, data-ora o durata, ottiene un oggetto JavaScript Date . È quindi possibile applicare a questo oggetto vari metodi elencati nella pagina MDN, incluso getMonth()
per il mese. Esempio:
var sheet = SpreadsheetApp.getActiveSheet(); var value = sheet.getRange("A1").getValue(); // is a Date object Logger.log([value.getMonth(), value.getHours(), value.getUTCHours()]); // examples of available methods
Al contrario, puoi assegnare un oggetto Date a una cella utilizzando setValue
e sarà formattato automaticamente come tale.
sheet.getRange("B2").setValue(new Date()); // current timestamp
Fusi orari
Il timestamp in Fogli Google è nel fuso orario locale, che viene impostato tramite File> Impostazioni foglio di lavoro. Lo script opera anche allinterno di un fuso orario, che potrebbe essere diverso e si trova in File> Proprietà del progetto nelleditor di script. Se questi fusi orari non sono daccordo, avrai un problema con i timestamp.
Per verificare se i fusi orari concordano, puoi confrontare entrambi manualmente o fare qualcosa di simile:
var sheet = SpreadsheetApp.getActiveSheet(); sheet.getRange("A1").setFormula("=date(2015,1,1)"); Logger.log(sheet.getRange("A1").getValue().getHours());
Questo inserisce la formula =date(2015,1,1)
nella cella A1. Il risultato sarà 2015-01-01 00:00:00 nel fuso orario del foglio di lavoro. Lo script quindi ottiene la data ed estrae le ore nellora locale dello script. Se i fusi orari concordano, dovresti vedere 0.0 nel log.
Commenti
- grazie, lavora per me, Una domanda aggiuntiva: voglio controllare un mucchio di celle, come intervallo (2, 1, 30, 20) .getValues; – come ottenerlo?
Risposta
Risposta breve
Di seguito vengono presentate due funzioni personalizzate come esempi del modo in cui Fogli Google e Google Apps Script potrebbero funzionare con le date.
Esempio 1: ottieni la data più recente
function myFunction(date1,date2) { return new Date(Math.max(date1,date2)) }
Esempio 2: Ottieni il mese della data più recente
function myFunction2(date1,date2) { var date = new Date(Math.max(date1,date2)); return date.getMonth(); }
Breve spiegazione
Nel primo esempio Math.max Il metodo JavaScript fa il lavoro.
Se lordine per ottenere una data come resu lt, un oggetto data viene creato utilizzando new Date () .
Nel secondo esempio, un oggetto data è assegnato a una variabile , quindi il metodo JavaScript getMonth () viene utilizzato per ottenere lindice del mese.Tieni presente che JavaScript utilizza 0
per lelemento iniziale, quindi 0
è per gennaio, 1
per febbraio e così via.
Riferimenti
- Funzioni personalizzate in Fogli Google – Guide degli script di Google Apps
- Confronta due date con JavaScript – StackOverflow
Commenti
- i)
date1
,date2
vengono passati come numeri (in genere: 54243)? ii) Ora ho provato a estrarre il mese didate2
utilizzandodate2.getMonth()
ma quando la cella è01/12/2015
restituisce 10 e 11 per02/12/2015
. Immagino sia ' a causa del fuso orario. La funzione fogliomonth()
è molto più semplice. - Fogli Google gestiscono le date come numeri serializzati come JavaScript, ma ognuno ha una data di inizio diversa. Quindi, se desideri utilizzare le funzioni di data JavaScript, devi prima convertire la data del foglio di calcolo in una data JavaScript. Come hai già notato, il percorso più semplice è utilizzare le funzioni del foglio di lavoro per gestire le date del foglio di lavoro e le funzioni JavaScript per gestire le date JavaScript.