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
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
- Egendefinerte funksjoner i Google Sheets – Google Apps Script Guides
- Sammenlign to datoer med JavaScript – StackOverflow
Kommentarer
- i) Går
date1
,date2
som tall (typisk: 54243)? ii) Jeg prøvde nå å trekke ut månedendate2
ved hjelp avdate2.getMonth()
men når cellen er01/12/2015
den returnerer 10 og 11 for02/12/2015
. Jeg antar at det ' s på grunn av tidssonen. Arkfunksjonenmonth()
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.