Jeg vil gerne definere en brugerdefineret funktion i Google Sheet. Denne funktion skal gøre noget meget simpelt, men jeg har ikke formået at finde ud af, hvordan jeg gør det. Jeg er meget forvirret med alle de svar, jeg læser, fordi jeg ikke kan finde en klar reference om håndtering af datoer i google-scripts.
Efter hvad jeg forstår, kan man foretage grundlæggende dato manipulationer med: >
-
new Date()
: fra hvad jeg forstår definerer det et objekt, der har nogle egenskaber. Jeg ved ikke, hvordan man bruger datoen for en celle og konverterer den som sådan et objekt. -
Utilities.formatDate()
: dette er for at ændre formatet på den dato, der ses som en streng . - biblioteket
Moment
( http://momentjs.com/ )
I sidste ende, hvordan kan jeg indtaste to datoer (f.eks. 31/01/2016
) og f.eks. finde det maksimale mellem de to og udtrække måneden for den første en?
function myfun(date1,date2) { // month = month of date 1 // return maximum(date1,date2); }
Jeg er også interesseret i, om nogen kan forklare dispositionerne for håndtering af datoer eller angive en god reference.
Kommentarer
- Se svar af Sergei insas til Sådan læses de korrekte tidsværdier fra Google regneark
- Tak. Er der ingen anden måde? Det ' virker utroligt kompliceret at udtrække, for eksempel en måneds dato! Plus det skal tage højde for tidszonen … At ' er en smule snoet til enkle (faste) datoperationer.
- Jeg tilføjede et svar med fokus på koden for den sag, der blev afsløret, men spørgsmålet er to bredt (dato manipulation). Måske skal du starte med at kigge efter JavaScript-kodestykker og onlinekurser.
- @Rub é n Jeg forstår det. Jeg ville ikke stille et " skrivekode til mig " spørgsmål, så jeg ledte efter generelle oplysninger, som jeg ikke rigtig fandt. Sergei insas ' s indlæg, du angav, er nyttigt.
- Med hensyn til generelle oplysninger om JavaScript, se developer.mozilla. org / da-US / docs / Web / JavaScript og vedrørende Google Apps Script se developers.google.com/apps-script .
Svar
Hentning og indstilling af datetime-værdier
Når dit script kalder .getValue()
på en celle, der er formateret som en dato, dato-tid eller varighed, får den et JavaScript-datoobjekt . Du kan derefter anvende forskellige metoder, der er anført på den MDN-side på dette objekt, inklusive 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 tildele et datoobjekt til en celle ved hjælp af setValue
, og det bliver automatisk formateret som sådan.
sheet.getRange("B2").setValue(new Date()); // current timestamp
Tidszoner
Tidsstemplet i Google Sheets er i lokal tidszone, som indstilles via File> Spreadsheet-indstillinger. Scriptet fungerer også inden for en tidszone, som kan være anderledes og findes under File> Project egenskaber i scripteditoren. Hvis disse tidszoner ikke er enige, har du et problem med tidsstempler.
For at kontrollere, om tidszonerne er enige, kan du enten sammenligne begge manuelt eller gøre noget lignende:
var sheet = SpreadsheetApp.getActiveSheet(); sheet.getRange("A1").setFormula("=date(2015,1,1)"); Logger.log(sheet.getRange("A1").getValue().getHours());
Dette indtaster formlen =date(2015,1,1)
i cellen A1. Resultatet bliver 01-01-2015 00:00:00 i regnearkets tidszone. Scriptet får derefter datoen og udtrækker timer i scriptets lokale tid. Hvis tidszonerne er enige, skal du se 0,0 i log.
Kommentarer
- tak, arbejde for mig. Et yderligere spørgsmål: Jeg vil kontrollere En flok celler, som rækkevidde (2, 1, 30, 20) .getValues; – hvordan opnår man det?
Svar
Kort svar
Nedenfor præsenteres to brugerdefinerede funktioner som eksempler på, hvordan Google Sheets og Google Apps Script kan fungere med datoer.
Eksempel 1: Få den nyeste dato
function myFunction(date1,date2) { return new Date(Math.max(date1,date2)) }
Eksempel 2: Få måneden med den nyeste dato
function myFunction2(date1,date2) { var date = new Date(Math.max(date1,date2)); return date.getMonth(); }
Kort forklaring
I det første eksempel Math.max JavaScript-metoden gør jobbet.
Hvis ordre for at få en dato som resu lt oprettes et datoobjekt ved hjælp af nyt Dato () .
I det andet eksempel tildeles et datoobjekt til en variabel , så bruges getMonth () JavaScript-metoden til at få månedindekset.Husk, at JavaScript bruger 0
til startelementet, så 0
er for januar, 1
til februar og så videre.
Referencer
- Tilpassede funktioner i Google Sheets – Google Apps Script Guides
- Sammenlign to datoer med JavaScript – StackOverflow
Kommentarer
- i) Overføres
date1
,date2
som tal (typisk: 54243)? ii) Jeg forsøgte nu at udtrækkedate2
måneden ved hjælp afdate2.getMonth()
men når cellen er01/12/2015
det returnerer 10 og 11 for02/12/2015
. Jeg antager, at det ' s på grund af tidszonen. Arkfunktionenmonth()
er så meget enklere. - Google Sheets håndterer datoer som serienumre det samme som JavaScript, men hver har forskellig startdato. Så hvis du vil bruge JavaScript-datofunktioner, skal du først konvertere regnearksdatoen til en JavaScript-dato. Som du allerede har bemærket, er den nemmere vej at bruge regnearksfunktioner til at håndtere regnearkdatoer og JavaScript-funktioner til at håndtere JavaScript-datoer.