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

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

Kommentarer

  • i) Overføres date1, date2 som tal (typisk: 54243)? ii) Jeg forsøgte nu at udtrække date2 måneden ved hjælp af date2.getMonth() men når cellen er 01/12/2015 det returnerer 10 og 11 for 02/12/2015. Jeg antager, at det ' s på grund af tidszonen. Arkfunktionen month() 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.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *