Jeg vil gjerne definere en egendefinert funksjon i Google Sheet. Denne funksjonen skal gjøre noe veldig enkelt, men jeg har ikke klart å finne ut hvordan jeg gjør det. Jeg er veldig forvirret med alle svarene jeg leser fordi jeg ikke kan finne en tydelig referanse til å håndtere datoer i google-skript.

Fra det jeg forstår, kan man gjøre grunnleggende datomanipuleringer med:

  • new Date(): fra det jeg forstår, definerer det et objekt som har noen egenskaper. Jeg vet ikke hvordan jeg skal bruke datoen til en celle og konvertere den som et slikt objekt.
  • Utilities.formatDate(): dette er for å endre formatet på datoen sett på som en streng .
  • biblioteket Moment ( http://momentjs.com/ )

På slutten, hvordan kan jeg legge inn to datoer (f.eks. 31/01/2016) og, si, finn maksimalt mellom de to og trekk ut måneden den første en?

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

Jeg er også interessert hvis noen kan forklare omrissene av håndteringen av datoer, eller indikere en god referanse.

Kommentarer

  • Se svar av Sergei insas til Hvordan lese de riktige tidsverdiene fra Google Regneark
  • Takk. Er det ingen annen måte? Det ' virker utrolig komplisert å trekke ut, for eksempel en datomåned! Pluss at det må ta hensyn til tidssonen … At ' er litt vridd for enkle (faste) datoperasjoner.
  • Jeg la til et svar fokusert på koden til saken som ble avslørt, men spørsmålet er to bredt (dato manipulasjon). Kanskje du bør begynne med å lete etter JavaScript-kodebiter og online kurs.
  • @Rub é n Jeg forstår det. Jeg ønsket ikke å stille et " skrivekode til meg " spørsmål, så jeg lette etter generell informasjon som jeg egentlig ikke fant. Sergei insas ' s innlegg du har angitt er nyttig.
  • Angående generell informasjon om JavaScript, se developer.mozilla. org / no-US / docs / Web / JavaScript og om Google Apps Script, se developers.google.com/apps-script .

Svar

Få og stille inn datetime-verdier

Når skriptet ditt ringer .getValue() på en celle formatert som en dato, dato eller tid, får den et JavaScript-datoobjekt . Deretter kan du bruke forskjellige metoder oppført på den MDN-siden på dette objektet, inkludert getMonth() for måneden. Eksempel:

 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 

Omvendt kan du tilordne et datoobjekt til en celle ved hjelp av setValue, og det blir automatisk formatert som sådan.

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

Tidssoner

Tidsstempelet i Google Sheets er i lokal tidssone, som er angitt via Fil> Regnearkinnstillinger. Skriptet fungerer også innenfor en tidssone, som kan være annerledes og finnes under Fil> Prosjektegenskaper i skriptredigereren. Hvis disse tidssonene ikke er enige, vil du ha et problem med tidsstempler.

For å sjekke om tidssonene stemmer overens, kan du enten sammenligne begge manuelt, eller gjøre noe slikt:

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

Dette skriver inn formelen =date(2015,1,1) i cellen A1. Resultatet vil være 01-01-2015 00:00:00 i regnearkets tidssone. Skriptet får da datoen og trekker ut timer i lokal tid for skriptet. Hvis tidssonene er enige, bør du se 0,0 i logg.

Kommentarer

  • takk, arbeid for meg. Et tilleggsspørsmål: Jeg vil sjekke En haug med celler, som område (2, 1, 30, 20) .getValues; – hvordan oppnå det?

Svar

Kort svar

Nedenfor presenteres to egendefinerte funksjoner som eksempler på hvordan Google Sheets og Google Apps Script kan fungere med datoer.

Eksempel 1: Få den nyeste datoen

få den nyeste datoen

function myFunction(date1,date2) { return new Date(Math.max(date1,date2)) } 

Eksempel 2: Få måneden med den nyeste datoen

function myFunction2(date1,date2) { var date = new Date(Math.max(date1,date2)); return date.getMonth(); } 

Kort forklaring

I det første eksemplet Math.max JavaScript-metoden gjør jobben.

Hvis bestilling for å få en dato som resu Det opprettes et datoobjekt ved å bruke ny Dato () .

I det andre eksemplet tildeles et datoobjekt til en variabel , så brukes getMonth () JavaScript-metoden for å få månedindeksen.Husk at JavaScript bruker 0 for startelementet, så 0 er for januar, 1 for februar og så videre.

Referanser

Kommentarer

  • i) Går date1, date2 som tall (typisk: 54243)? ii) Jeg prøvde nå å trekke ut måneden date2 ved hjelp av date2.getMonth() men når cellen er 01/12/2015 den returnerer 10 og 11 for 02/12/2015. Jeg antar at det ' s på grunn av tidssonen. Arkfunksjonen month() er så mye enklere.
  • Google Sheets håndterer datoer som serienumre det samme som JavaScript, men hver har forskjellig startdato. Så hvis du vil bruke JavaScript-datafunksjoner, bør du først konvertere regnearkdatoen til en JavaScript-dato. Som du allerede har lagt merke til, er det enklere å bruke regnearkfunksjoner til å håndtere regnearkdatoer og JavaScript-funksjoner for å håndtere JavaScript-datoer.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *