Manipolazione della data di base nello script di Google


11

Vorrei definire una funzione personalizzata in Google Sheet. Questa funzione dovrebbe fare qualcosa di molto semplice, ma non sono riuscito a trovare il modo di farlo. Sono molto confuso con tutte le risposte che leggo perché non riesco a trovare un riferimento chiaro sulla gestione delle 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 a cambiare il formato della data vista come una stringa .
  • la biblioteca Moment( http://momentjs.com/ )

Alla fine, come posso inserire due date (ad esempio 31/01/2016) e, per esempio, trovare il massimo tra le due ed estrarre il mese del primo?

function myfun(date1,date2) {  
   // month = month of date 1
   // return maximum(date1,date2);  
}

Sono anche interessato se qualcuno può spiegare i contorni di gestione delle date o indicare un buon riferimento.



Grazie. Non c'è altro modo? Sembra incredibilmente complicato estrarre, ad esempio, il mese di un appuntamento! Inoltre, deve tenere conto del fuso orario ... È un po 'contorto per le operazioni di data (fisse) semplici.
capito il

Ho aggiunto una risposta focalizzata sul codice del caso che è stato esposto, ma la domanda è di due ampie dimensioni (manipolazione della data). Forse dovresti iniziare cercando frammenti di codice JavaScript e corsi online.
Rubén,

@ Rubén ho capito. Non volevo fare una domanda "scrivi codice per me", quindi cercavo informazioni generali che non avevo trovato. Il post di Sergei insas che hai indicato è utile.
capito il

Per quanto riguarda le informazioni generali su JavaScript, consultare developer.mozilla.org/en-US/docs/Web/JavaScript e per quanto riguarda Google Apps Script, consultare developers.google.com/apps-script .
Rubén,

Risposte:


14

Ottenere e impostare i valori di data e ora

Ogni volta che lo script chiama .getValue()una cella formattata come data, data-ora o durata, ottiene un oggetto Data JavaScript . È quindi possibile applicare a questo oggetto vari metodi elencati in quella 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

Viceversa, puoi assegnare un oggetto Date a una cella usando setValuee verrà automaticamente formattato come tale.

  sheet.getRange('B2').setValue(new Date());  // current timestamp

Fusi orari

Il timestamp in Fogli Google è nel fuso orario locale, che è impostato tramite File> Impostazioni foglio di calcolo. Lo script opera anche all'interno di un fuso orario, che può essere diverso e si trova in File> Proprietà progetto nell'editor di script. Se questi fusi orari non sono d'accordo, avrai un problema con i timestamp.

Per verificare se i fusi orari sono d'accordo, puoi confrontare entrambi manualmente o fare qualcosa del genere:

var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange('A1').setFormula('=date(2015,1,1)');
Logger.log(sheet.getRange('A1').getValue().getHours());

Ciò introduce la formula =date(2015,1,1)nella cella A1. Il risultato sarà 01-01-2015 00:00:00 nel fuso orario del foglio di calcolo. Lo script ottiene quindi la data ed estrae le ore nell'ora locale dello script. Se i fusi orari sono d'accordo, dovresti vedere 0.0 nel registro.


4

Risposta breve

Di seguito vengono presentate due funzioni personalizzate come esempi di come Fogli Google e Script di Google Apps potrebbero funzionare con le date.

Esempio 1: ottieni la data più recente

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 il metodo JavaScript Math.max fa il lavoro.

Se l'ordine di ottenere una data come risultato, viene creato un oggetto data utilizzando new Date () .

Nel secondo esempio, un oggetto data viene assegnato a una variabile, quindi il metodo JavaScript getMonth () viene utilizzato per ottenere l'indice del mese. Tieni presente che l'uso di JavaScript 0per l'elemento di partenza lo 0è anche per gennaio, 1per febbraio e così via.

Riferimenti


i) siano date1, date2passata come numeri (in genere: 54243)? ii) Ora ho cercato di estrarre il mese di date2utilizzo date2.getMonth()ma quando la cella è 01/12/2015restituisce 10 e 11 per 02/12/2015. Immagino sia a causa del fuso orario. La funzione del foglio month()è molto più semplice.
capito il

I Fogli Google gestiscono le date come numeri serializzati allo stesso modo di JavaScript ma ognuno ha una data di inizio diversa. Pertanto, se si desidera utilizzare le funzioni di data JavaScript, è necessario innanzitutto convertire la data del foglio di calcolo in una data JavaScript. Come già notato, il percorso più semplice è utilizzare le funzioni del foglio di calcolo per gestire le date del foglio di calcolo e le funzioni JavaScript per gestire le date JavaScript.
Rubén,

@anderstood: ho aggiunto un secondo esempio.
Rubén,

Grazie ancora. Per quanto riguarda il secondo esempio, come avevo scritto, quando il massimo è il 01/12/2015 myfunction2restituisce 10 e quando il massimo è il 02/12/2015, restituisce 11. Mentre sto bene con l'11, non capisco perché restituisce 10 per il 01/12/2015. Come ho detto, credo che ciò sia dovuto al GMT, ma non ne sono sicuro. Mi sto perdendo qualcosa?
capito il

@anderstood: crea un foglio di calcolo demo condividilo con chiunque abbia il link per la sola visualizzazione e pubblica una nuova domanda incluso il link al foglio di calcolo demo.
Rubén
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.